После обновления нашего сервера до Debian Jessie (8.3) я переключил Apache 2.4.10 с mpm_worker / mod_php на mpm_event / proxy_fcgi / php-fpm. У меня настроена передача обслуживания для всех виртуальных хостов как таковых:
# cat conf-enabled/php5-fpm.conf
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php5-fpm.sock|fcgi://localhost/"
</FilesMatch>
Я также отключил mod_php. Из-за этого apache не позволит мне иметь директивы php_admin_value / php_value / php_flag в файлах VirtualHosts.
Invalid command 'php_value', perhaps misspelled or defined by a module not included in the server configuration
Я немного читал о файлах .user.ini, но это не похоже на то, что директивы, которые мне нужно установить, там поддерживаются, и я просто успешно удалил все файлы .htaccess со своего сайта по соображениям производительности, поэтому это кажется обратным (и несовместимым) подходом.
Другое распространенное предложение - создать уникальный пул для каждого VirtualHost, но меня это беспокоит по двум причинам:
В конце концов, я просто определил несколько разделов [HOST =] в моей конфигурации /etc/php5/fpm/php.ini.
http://php.net/manual/en/ini.sections.php
Это было более безопасно, чем использование mod_env или .user.ini.
Вы можете передать переменные среды в пул CGI из файлов конфигурации Apache:
SetEnv PHP_ADMIN_VALUE "open_basedir=/path-to-your-doc-root"
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php5-fpm.sock|fcgi://localhost/"
</FilesMatch>
mod_env
должен быть включен, и вы должны отключить .htaccess
обработка файлов, если сторонние пользователи могут загружать или изменять их (AllowOverride None
). Если вам нужно передать более одной переменной, вы должны объединить их символом новой строки (\n
).
Злоумышленник может изменить open_basedir
или другие важные переменные конфигурации PHP (например: disable_functions
) с простым .htaccess
. Я не знаю, можно ли предотвратить такое поведение.