Welcome! Log In Create A New Profile

Advanced

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

February 27, 2011 12:59PM
>> Когда делаю что-то подобное:
>>
>> 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 - меньшее зло.

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

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

Maxim Dounin February 22, 2011 09:52PM

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

green February 27, 2011 12:59PM

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

Maxim Dounin February 28, 2011 05:16AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 303
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready