php
Maxim Dounin
mdounin на mdounin.ru
Сб Ноя 12 03:20:30 UTC 2011
Hello!
On Fri, Nov 11, 2011 at 04:48:36PM -0500, locojohn wrote:
> Уважаемый Игорь,
>
> Я устанавливаю переменную FastCGI
> окружения PHP_VALUE в значение
> "include_path=$document_root" в server {} блоке, чтобы
> PHP-FPM backend находил нужные файлы в include_path
> равном $document_root:
>
> server {
> listen 80;
> server_name test.com;
>
> root /opt/www/test.com;
>
> fastcgi_read_timeout 1800;
> fastcgi_send_timeout 1800;
> fastcgi_param PHP_VALUE "include_path=$document_root";
>
>
> ...
>
>
> location ~ ^(?<SCRIPT_FILENAME>.+\.php)$ {
> include fastcgi_php.conf;
> fastcgi_param SCRIPT_URL $SCRIPT_FILENAME;
> fastcgi_param SCRIPT_URI
> $scheme://$http_host$SCRIPT_FILENAME;
> fastcgi_pass phpfarm;
http://nginx.org/ru/docs/http/ngx_http_fastcgi_module.html#fastcgi_param
Директивы наследуются с предыдущего уровня при условии, что на
данном уровне не описаны свои директивы fastcgi_param.
[...]
> Однако, наблюдается очень странная
> ситуация. При refreshe страницы с php
> скриптом, я распечатываю значение
> "include_path", и на каждый третий раз он
> выдаёт системное значение eg: ".:/usr/share/php",
> как будто PHP_VALUE "include_path=$document_root" не
> передаётся в php-fpm окружение. В
> остальные же разы печатается
> правильное значение, т.е.: "/opt/www/test.com".
>
> Чтобы это могло значить? Если же я
> ставлю fastcgi_param PHP_VALUE в вышеуказанные
> location {} блоки, то значение include_path всегда
> правильное, то есть равное $document_root, что
> я передаю через fastcgi_param. Я пробовал
> указывать вместо $document_root путь
> "/opt/www/test.com" напрямую без переменной, но
> это не изменило ситуации. Каждый
> третий раз при рефреше одной и той же
> страницы печатается неправильное
> значение include_path.
>
> Получается, что ваше решение не
> работает полностью.
>
> Есть ли у вас какие-нибудь догадки по
> поводу решения данной проблемы?
Все fastcgi_param нужно определять полностью на одном уровне.
Если годятся "стандартные" - их можно определить хоть на уровне
http, а дальше наследовать (как было в примере конфигурации,
приведённым Игорем).
Если под данный location нужны свои специальные fastcgi_param -
нужно их все определить в данном location'е. Или переосмыслить
конфигурацию и сделать так, чтобы годились стандартные, в
большинстве случаев это делается легко и непринуждённо.
Maxim Dounin
Подробная информация о списке рассылки nginx-ru