Я запускаю 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 из-за сокета.