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