Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: CGI::Fast && $ENV{HTTP_*}
Hello!
On Tue, Oct 06, 2009 at 10:33:44PM +0500, Peter Vereshagin wrote:
> You can't take no for an answer, nginx-ru!
> 2009/10/06 16:55:54 +0400 Maxim Dounin <mdounin@xxxxxxxxxx> => To
> nginx-ru@xxxxxxxxx :
> MD> > В любом случае, в документации про то, что fastcgi_param или $content_*
> не работают в секции http --- нет.
> MD>
> http://sysoev.ru/nginx/docs/http/ngx_http_fastcgi_module.html#fastcgi_param
> MD> <quote>
> MD> Директивы наследуются с предыдущего уровня при условии, что на
> MD> данном уровне не описаны свои директивы fastcgi_param.
> MD> </quote>
>
>
> спасибо.
> что одна строчка fastcgi_param отменяет все остальные fastcgi_param только
> потому что они были уровнем выше --- это когда/почему удобно? остальные-то
> наследуются обычным порядком.
Это то, как работает конфиг для всех переменных, задающих массивы
(access_log, error_log, proxy_set_header, fastcgi_param, ...).
Если бы оно работало по другому - как минимум требовался бы
дополнительный синтаксис для очистки унаследованных значений.
> вводить приходится из-за PATH_INFO. fastcgi_split_path_info --- это, видать,
> недавняя фича? везде рекомендуют делать так:
http://nginx.net/CHANGES
Changes with nginx 0.7.31
...
*) Feature: the "fastcgi_split_path_info" directive.
...
> if ($uri ~ "^(.+\.php)(/.+)") {
> set $script $1;
> set $path_info $2;
> }
> fastcgi_param PATH_INFO $path_info
>
> соответственно, все остальные fastcgi_param тоже надо тащить в тот location
> из-за такой вот малости.
>
> всё равно есть пожелание чтобы можно было бы определять
> fastcgi_split_path_info прямо на уровне http{} тогда. или сделать так, чтобы
> не переопределённые fastcgi_param наследовались бы.
Задавать fastcgi_split_path_info на уровне http - достаточно
бессмысленно, т.к. где кончается имя скрипта, и начинается path
info - обычно неизвестно никому, кроме автора скрипта.
А вот использовать переменные $fastcgi_script_name и
$fastcgi_path_info можно где угодно, и задать все
fastcgi_param на уровне http никто не мешает. При этом если
fastcgi_split_path_info в конкретном location не задан -
$fastcgi_script_name будет содержать весь uri, а
$fastcgi_path_info будет соответственно пустым.
Впрочем, обычную практику
fastcgi_param SCRIPT_FILENAME /path/to/script;
fastcgi_param PATH_INFO /path/info/if/here;
include fastcgi_params;
тоже никто не отменял.
Maxim Dounin
|