Re: Re: Наследование fastcgi_param
Maxim Dounin
mdounin at mdounin.ru
Thu Jul 9 13:28:00 UTC 2015
Hello!
On Thu, Jul 09, 2015 at 05:14:19PM +0500, Amanda Sproule wrote:
> >>Поведение nginx'а сейчас: послать на бекенд ровно то, что администратор
> написал в конфиге, и оно консистентно для всех соответствующих модулей
> (proxy, fastcgi, scgi, uwsgi). Менять это поведение не планируется.
>
> послать на бекенд ровно то, что администратор написал в конфиге - так ведь
> не посылает, в начале топика я описал, что если в локейшене переопределён
> fastcgi_param SCRIPT_FILENAME /www/info.php; то только он и передаётся (и
> тут возник весь сыр бор с наследованием).
Вы путаете темы обсуждения: я отвечал Гене про дублирующиеся
fastcgi-параметры с одинаковыми именами. Вы же пытаетесь в
очередной раз рассказать миру о том, что не понимаете, как
работает наследование директив конфигурации в nginx'е.
Впрочем, ответ "ровно то, что администратор написал в конфиге" в
данном случае также подходит. В соответствующем location'е
написан ровно один параметр, и именно он и посылается.
Именно так работает наследование для всех директив конфигурации:
если на текущем уровне соответствующая директива не встречается,
то используется значение с предыдущего уровня. Если встречается -
то используется то, что написано на текущем уровне. Это относится
как к директивам, которые могут существовать только в единственном
экземпляре (e.g., root), так и к директивам, которые можно
указывать несколько раз (e.g., fastcgi_param, proxy_set_header,
access_log).
> Экспериментальным путём подобрал минимальное количество параметров
>
> location /info {
> fastcgi_param REQUEST_METHOD $request_method;
> fastcgi_param SCRIPT_FILENAME /www/info.php;
> fastcgi_pass 127.0.0.1:9000;
> }
>
> и phpinfo() ровно эти параметры и показал, никаких других не было.
Специально для того, чтобы SCRIPT_FILENAME можно было задавать
руками отдельно от других параметров - в дистрибутиве лежит файл
fastcgi_params, содержащий все параметры кроме SCRIPT_FILENAME.
Соответсвенно, если вам надо указать явно SCRIPT_FILENAME, то
правильно делать так:
location = /info {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /path/to/info.php;
fastcgi_pass 127.0.0.1:9000;
}
Если же путь к файлу стандартный, то можно использовать
fastcgi.conf, где SCRIPT_FILENAME уже задан в виде
$document_root$fastcgi_script_name, и соответственно писать как-то
так:
include fastcgi.conf;
root /path/to;
location = /info.php {
fastcgi_pass 127.0.0.1:9000;
}
Note: в этом случае в конкретном location'е можно вообще ничего
кроме fastcgi_pass не писать, а задать всё на более ранних
уровнях.
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru