ПРОЕКТЫ 


  АРХИВ 


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 - пропадают аргуме нты


  • To: nginx-ru@xxxxxxxxx
  • Subject: Re: proxy pass - пропадают аргуме нты
  • From: "green" <nginx-forum@xxxxxxxx>
  • Date: Sun, 27 Feb 2011 12:59:54 -0500
  • Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mickey.jlkhosting.com; s=x; h=Date:Sender:From:References:In-Reply-To:Message-ID:Content-Transfer-Encoding:Content-Type:Subject:To; bh=rhJWihVePagUJEB6Lb98S1FA7jQpRa+C6JVZqWxirus=; b=e040mwXdAZfHqw2LJfydEB7QuK+TqoeCwN3eehmx+WovafbTi93x6kgVPeVcIdn0NI94clwWbHl7oMEgpatIjaGfdXXD9Nro2r2ny8C6FmYr4jiUPbsCYNbRpOlikGbf;
  • In-reply-to: <20110223025007.GP86851@xxxxxxxxxx>
  • References: <20110223025007.GP86851@xxxxxxxxxx>

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

Я бы не сказал что дело именно в
переменных. Дело вроде как в указании
пути. Т.е. если есть хотя бы / в конце, то
всё пропадает. Этого не написано в
документации. При этом rewrite ведёт себя
иначе (что описано в документации). И
из-за этого возникает конфуз с
пониманимем работы proxy_pass.

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

Это мне кажется странным. Чем это
принципиально отличается от того,
когда nginx сам копирует URI вместо
выделенной мною части?

> Ну и в качестве дополнительного
бонуса - соответствующий 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?
>
> Правильно - разделять код и данные, и
делать

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

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

А это работать не будет :). Т.к. стоит
слеш в конце.

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

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

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,177631,178853#msg-178853


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


 




Copyright © Lexa Software, 1996-2009.