try_files + subrequest + proxy-handler
Eugene Mychlo
myc at cname.me
Tue Apr 21 09:08:51 UTC 2015
add_after_body тут нужен исключительно для демонстрации сабреквеста.
Подобную ситуацию можно получить с любым модулем, использующим сабреквест.
http://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_pass <http://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_pass>
Если директива proxy_pass указана без URI, то при обработке первоначального запроса на сервер передаётся URI запроса в том же виде, в каком его прислал клиент, а при обработке изменённого URI - нормализованный URI запроса целиком:
Исходя из этого совсем не очевидно почему main request долетает до бэкенда без изменения URI, а subrequest с изменением URI.
> 21 апр. 2015 г., в 11:40, Иван Мишин <simplebox66 at gmail.com> написал(а):
>
> Добрый день!
> add_after_body /duo;
> Для чего эта строка в конфиге?
> Ну а так вроде бы все правильно по логике должно выдавать "uno tres ". В чем проблема не совсем понятно
>
> 20 апреля 2015 г., 17:39 пользователь Eugene Mychlo <myc at cname.me <mailto:myc at cname.me>> написал:
> Добрый день,
>
> Столкнулся со странной поведением nginx при использовании subrequest в сочетании с try_files с proxy-хэндлером.
> В приведенной ниже конфигурации, ожидалось, что при наличии файла /tmp/tres, на запрос
>
> http://127.0.0.1:8080/uno <http://127.0.0.1:8080/uno>
>
> nginx вернет строку "uno duo " или "tres tres ", но никак не "uno tres ".
>
> Т.е. URI основного запроса передается без изменений (как и описано в документации), а подзапроса - нет.
> Ситуация воспроизводится на nginx версий 1.7.9 - 1.7.12.
>
> Отсюда вопрос: является ли подобное поведение задуманным или это бага?
> Будет ли меняться? И не стоит ли отметить это в документации?
>
>
>
> server {
> listen 8081;
> default_type text/html;
>
> location /uno { return 200 "uno "; }
> location /duo { return 200 "duo "; }
> location /tres { return 200 "tres "; }
> }
>
>
> server {
> listen 8080;
>
> location / {
> root /tmp;
> try_files /tres =404;
> proxy_pass http://127.0.0.1:8081 <http://127.0.0.1:8081/>;
> add_after_body /duo;
> }
> }
>
>
>
> --
> Regards,
> Eugene Mychlo MYC-RIPE EAMYC-RIPN
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru at nginx.org <mailto:nginx-ru at nginx.org>
> http://mailman.nginx.org/mailman/listinfo/nginx-ru <http://mailman.nginx.org/mailman/listinfo/nginx-ru>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20150421/a3d9cef4/attachment-0001.html>
Подробная информация о списке рассылки nginx-ru