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