Route by request method

Eugene Prokopiev enp на itx.ru
Вт Фев 9 15:05:48 UTC 2021


Понятно, спасибо!

вт, 9 февр. 2021 г. в 17:12, Maxim Dounin <mdounin на mdounin.ru>:
>
> Hello!
>
> On Tue, Feb 09, 2021 at 04:40:02PM +0300, Eugene Prokopiev wrote:
>
> > Но я вот задумался: а нельзя ли прямо внутри if использовать
> > pass_proxy? Тут -
> > https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass
> > указан
> > сontext: if in location - значит можно? Я попробовал - не работает. Почему?
>
> Теоретически - можно.  На практике - это чревато проблемами.
> Подробный ответ на вопрос "почему" есть в статье "if is evil", она
> ещё сохранилась в остатках wiki:
>
> https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/
>
> Скажем, вот такая конфигурация работает без проблем:
>
>     location / {
>         if ($request_method != GET) {
>             proxy_pass http://127.0.0.1:8081;
>         }
>
>         # static
>     }
>
> Но уже вот такая сделает совсем не то, что хотелось бы:
>
>     location / {
>         if ($request_method != GET) {
>             proxy_pass http://127.0.0.1:8081;
>         }
>
>         set $true 1;
>         if ($true) {
>             # nothing
>         }
>
>         # static
>     }
>
> Конкретно для исходной задачи наиболее простым и органичным
> решением будет, IMHO, использование limit_except, как-то так:
>
>     location / {
>         limit_except GET {
>             proxy_pass http://127.0.0.1:8081;
>         }
>
>         # static
>     }
>
> Но и тут есть свои нюансы: скажем, если в location'е есть
> директивы модуля rewrite, в часности - те же if'ы, то они просто
> не будут работать для запросов, попавших в блок limit_except.
>
> Ну а наиболее универсальное решение из всех возможных уже привёл
> Олег - сделать rewrite по нужному условию в другой location и там
> уже делать что угодно.
>
> --
> Maxim Dounin
> http://mdounin.ru/
> _______________________________________________
> nginx-ru mailing list
> nginx-ru на nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru



-- 
WBR,
Eugene Prokopiev


Подробная информация о списке рассылки nginx-ru