PHP-FPM chroot - один пул для всех виртуальных хостов nginx
Теперь у нас есть несколько виртуальных серверов (nginx) в одном пуле php-fpm. Мы хотели бы использовать это так же с
chroot
.
Директива Chroot - это абсолютный путь
/var/www
, но
chdir
должно быть
/[domain]/httpdocs
Можно ли передать какую-нибудь переменную (например
$domain
) из nginx для использования в
chdir=/$domain/httpdocs
нравиться
$pool
?
1 ответ
Наконец я понял это.
Конфигурация виртуального хоста nginx
root /chroot/var/www/domain.com/httpdocs;
...
location ~ ^/[^/]+\.php$
{
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
fastcgi_param SCRIPT_FILENAME /var/www/domain.com/httpdocs$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT /var/www/domain.com/httpdocs;
}
конфигурация пула
chroot = /chroot
chdir =
Устранение неполадок chroot PHP-FPM
пути должны быть переопределены в каждом виртуальном хосте nginx и переданы в php-fpm с помощью fastcgi_param
fastcgi.conf уже имеет определения для SCRIPT_FILENAME, DOCUMENT_ROOT, поэтому директивы должны стоять за include. Значение по умолчанию DOCUMENT_ROOT - корень виртуального хоста nginx!!
fastcgi_pass должен быть ip:port вместо socket (недоступен в chroot) (добавьте listen=9000 в конфигурацию пула)
используйте модуль дополнительных заголовков nginx для отладки для просмотра переменных в заголовках ответов (пакет debian libnginx-mod-http-headers-more-filter)
more_set_headers "x-debug-header: $document_root";
Осложнения, связанные с chroot PHP-FPM
- разрешение доменных имен
- часовой пояс
- почта ()
- ssl потоки
- модуль imagick
https://knzl.at/setting-up-a-chroot-for-php/https://gist.github.com/nikitasius/7ff0de91e314d955f4e66c76a5c47bf2