ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: proxy pass - пропадают аргуме нты



Hello!

On Tue, Feb 22, 2011 at 06:31:03PM -0500, green wrote:

> Когда делаю что-то подобное:
> 
> location ~ ^/test(/.*\.php)$ {
>     proxy_pass http://cgi$1;
> }
> 
> То в запросе не передаются аргументы,
> т.е. запрос:
> http://server/test/xxx.php?param
> преобразуется в:
> http://cgi/xxx.php
> (без аргументов)

Если вы задаёте url в proxy_pass с использованием переменных - вы 
задаёте его полностью.  Поскольку аргументы в формируемый url вы 
не включили - их там и нет.

Отдельно при таком способе задания доставит необходимость 
самостоятельно следить за корректностью получаемого url'а, в 
частности - escape'ингом спецсимволов.  Вышеприведённый конфиг 
замечательно ломается от запросов вида "/test/blah%0D%OA.php".

Ну и в качестве дополнительного бонуса - соответствующий upstream 
должен быть либо явно описан, либо должен быть настроен resolver 
(и соответственно будет делаться resolve регулярно).

Вообще, proxy_pass с переменными - он для случаев, когда хочется 
странного, а не для нормальной работы.  Не надо его использовать 
без нужды.

> Если же делать:
> 
> location ~ \.php$ {
>     rewrite ^/test(/.*\.php)$ $1 break; # без него тоже
> передаётся, но необрезанное
>     proxy_pass http://cgi;
> }
> 
> То всё передаётся. В документации
> ничего вроде не нашёл про это, зато там
> написано, что если указывать proxy_pass без
> uri, то ему передастся запрос as-is, без
> сокращения слешей и т.п.
> Это баг или фича? И что меньшее зло - rewrite
> или добавлять $is_args$args в proxy_pass?

Правильно - разделять код и данные, и делать

    location /test/ {
        proxy_pass http://backend/;
    }

Если нужно проксировать только *.php, то rewrite - меньшее зло.

Maxim Dounin

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.