Назад | Перейти на главную страницу

Сложная настройка chroot для nginx / php-fpm

Я запускаю nginx и php-fpm, и я хочу настроить тюрьмы для каждого хоста. Моя установка немного сложна, поэтому следующие руководства в Интернете ни к чему не приведут.

На каждом сайте есть каталог /var/www/domain.name/

Внутри этого каталога будет каталог public /, который будет корнем веб-сайта, каталог logs /, в котором будут храниться логи nginx специально для этого сайта, и файловая система chroot (etc /, usr / и т. Д.)

Первая проблема, с которой я столкнулся, заключается в том, что независимо от того, как я его настраиваю, PHP-FPM не может найти файлы, которые передаются ему через nginx. Они приводят к ошибке «Неизвестный первичный сценарий» и, что еще хуже, сообщения об ошибках от PHP-FPM не более подробны, поэтому я не могу понять, какой путь передается nginx.

Конфигурация пула php-fpm для хоста выглядит так:

[host]
user = host
group = www-data
chroot = /var/www/domain.name
chdir = /public
listen = 127.0.0.1:900x

«x» увеличивается для каждого пула.

Конфигурация nginx для этого хоста выглядит так:

server
{
    listen  80;

    server_name     domain.name *.domain.name;

    root            /var/www/domain.name/public;
    index           index.php index.html index.html;

    location ~ \.php$
    {
            expires epoch;

            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            include fastcgi_params;
            fastcgi_index index.php;

            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

            fastcgi_pass 127.0.0.1:9001;
    }
}

Я предполагаю, что проблема в параметре SCRIPT_FILENAME, но я изменил его только на $ fastcgi_script_name и различные другие комбинации, но безрезультатно.

Кто-нибудь может помочь?

Проблема здесь:

            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

Ваш PHP работает в chroot в /var/www/domain.name, но корень вашего документа /var/www/domain.name/public. Итак, когда вы загружаете /index.php в SCRIPT_FILENAME становится /var/www/domain.name/public/index.php. Но в chroot этого не существует! Это в /public/index.php вместо.

Что вы можете сделать, так это изменить каталог здесь, чтобы он соответствовал представлению из chroot:

            fastcgi_param SCRIPT_FILENAME /public$fastcgi_script_name;

Что будет работать, так это установить в nginx conf:

root            /public;

Я пробовал это и работает, но если у вас есть mysql db для подключения, это вообще не сработает. Это тоже мое ограничение, заставило его работать, но не смог подключиться к mysql db из-за сокета.