CGI::Fast && $ENV{HTTP_*}

Maxim Dounin mdounin at mdounin.ru
Wed Oct 7 02:50:02 MSD 2009


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 at mdounin.ru> => To nginx-ru at sysoev.ru :
> 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





More information about the nginx-ru mailing list