URL from X-Accel-Redirect overrides $uri for $proxy_pass after 1.2.0 upgrade
Maxim Dounin
mdounin на mdounin.ru
Сб Апр 28 12:13:22 UTC 2012
Hello!
On Sat, Apr 28, 2012 at 07:44:53AM -0400, lekrus wrote:
> Здравствуйте,
>
> Есть такой код:
>
> location ~* ^/int/(.*) {
> internal;
>
> proxy_set_header Host $host;
> proxy_set_header X-Real-IP $remote_addr;
> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
>
> proxy_pass $scheme://$backend;
> proxy_redirect off;
> proxy_buffering off;
> }
>
> На эту ветку nginx попадает после
> передачи в X-Accel-Redirect параметра вида
> "/int/bla"
>
> Запрос вида: http://localhost/test.aspx
> До обновления на 1.2.0 перенаправлял на
> http://www.myhost.com/test.aspx
> После обновления на 1.2.0 перенаправляет
> на http://www.myhost.com/int/bla (т.е. на location, который
> передали в X-Accel-Redirect header)
>
> В документации написано, что
> оригинальный URI не будет переписан.
> После обновления на 1.2.0. пришлось
> сделать такое изменение, чтобы
> редирект был правильным:
> proxy_pass $scheme://$backend$request_uri;
>
> Подскажите - это раньше работало
> неправильно, а в новой версии все
> хорошо, либо это все же баг новой
> версии, либо это новая особенность?
Это раньше работало неправильно.
Changes with nginx 1.1.12:
*) Bugfix: a "proxy_pass" directive without URI part always used
original request URI if variables were used.
Теперь оно себя ведёт так же, как если бы проксируемый сервер
был задан в конфиге явно, т.е. разницы в поведении
proxy_pass http://backend.example.org;
и
set $backend "backend.example.org";
proxy_pass http://$backend;
нет (за исключением динамического резолвинга имён).
Maxim Dounin
Подробная информация о списке рассылки nginx-ru