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

  1. пути должны быть переопределены в каждом виртуальном хосте nginx и переданы в php-fpm с помощью fastcgi_param

  2. fastcgi.conf уже имеет определения для SCRIPT_FILENAME, DOCUMENT_ROOT, поэтому директивы должны стоять за include. Значение по умолчанию DOCUMENT_ROOT - корень виртуального хоста nginx!!

  3. fastcgi_pass должен быть ip:port вместо socket (недоступен в chroot) (добавьте listen=9000 в конфигурацию пула)

  4. используйте модуль дополнительных заголовков 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

Другие вопросы по тегам