Спасибо! Но я вот задумался: а нельзя ли прямо внутри if использовать pass_proxy? Тут - https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass указан сontext: if in location - значит можно? Я попробовал - не работает. Почему?
вт, 9 февр. 2021 г. в 15:52, Oleg A. Mamontov <o...@mamontov.net>: > > On Tue, Feb 09, 2021 at 03:36:49PM +0300, Eugene Prokopiev wrote: > >Всем спасибо! > > > >А нет ли чего-то среднего: передать запрос с помощью rewrite (это > >выглядит чище использования фиктивного статуса, хотя явный goto был бы > >еще чище) в именованный @location вместо internal (тогда переменная > >request_filename будет содержать правильное значение)? > > Если вам хочется возвращать $uri в исходное значение, то это также > достигается посредством rewrite, заодно тогда и trailing slash не нужен: > --- > location / { > if ($request_method != 'GET') { > rewrite ^/(.*) /proxy/$1 last; > } > root /data; > } > location /proxy/ { > internal; > rewrite ^/proxy/(.*) /$1 break; > proxy_pass http://127.0.0.1:8080; > } > --- > > >вт, 9 февр. 2021 г. в 11:20, Илья Шипицин <chipits...@gmail.com>: > >> > >> можно на limit_except разрешить только GET. остальное попадет в запрет и > >> навешать на него кастомную страницу ошибки > >> > >> вт, 9 февр. 2021 г. в 13:17, Oleg A. Mamontov <o...@mamontov.net>: > >>> > >>> On Tue, Feb 09, 2021 at 12:48:55AM +0200, Gena Makhomed wrote: > >>> >On 08.02.2021 23:24, Oleg A. Mamontov wrote: > >>> > > >>> >>"Традиционный" подход - сделать по требуемому условию rewrite, уводящий > >>> >>обработку запроса в другой location. Обратите внимание - trailing slash > >>> >>в proxy_pass в данном случае имеет значение. > >>> >>--- > >>> >>location / { > >>> >> if ($request_method != 'GET') { > >>> >> rewrite ^/(.*) /proxy/$1 last; > >>> >> } > >>> >> root /data; > >>> >>} > >>> >>location /proxy/ { > >>> >> internal; > >>> >> proxy_pass http://127.0.0.1:8080/; > >>> >>} > >>> > > >>> >Возможно переход в именованный location с помощью директив > >>> >"error_page 418 = @location; return 418;" будет лучше > >>> >с точки зрения читабельности, чем rewrite директивы, > >>> >делающие конфиг nginx похожим на конфиг sendmail? > >>> > >>> Я не вижу аналогии с sendmail.cf равно как и не вижу, чем подход > >>> с error_page лучше для решения поставленной задачи. > >>> > >>> Что вижу: нецелевое использование директивы / фиктивного статуса, > >>> появление лишней строки в конфиге и необходимость включать > >>> recursive_error_pages при использовании реальной обработки последующих > >>> ошибок проксирования. > >>> > >>> Но согласен - так делать тоже можно, TMTOWTDI > >>> > >>> >location / { > >>> > if ($request_method != 'GET') { > >>> > error_page 418 = @proxy; > >>> > return 418; > >>> > } > >>> > root /data; > >>> >} > >>> >location @proxy { > >>> > proxy_pass http://127.0.0.1:8080; > >>> >} > >>> > > >>> >По-сути вот этот набор из двух директив: > >>> >"error_page 418 = @location; return 418;" > >>> >означает простое действие "goto @location;" > >>> > > >>> >-- > >>> >Best regards, > >>> > Gena > >>> > > >>> >_______________________________________________ > >>> >nginx-ru mailing list > >>> >nginx-ru@nginx.org > >>> >http://mailman.nginx.org/mailman/listinfo/nginx-ru > >>> > >>> -- > >>> Cheers, > >>> Oleg A. Mamontov > >>> > >>> mailto: o...@mamontov.net > >>> > >>> skype: lonerr11 > >>> cell: +7 (903) 798-1352 > >>> _______________________________________________ > >>> nginx-ru mailing list > >>> nginx-ru@nginx.org > >>> http://mailman.nginx.org/mailman/listinfo/nginx-ru > >> > >> _______________________________________________ > >> nginx-ru mailing list > >> nginx-ru@nginx.org > >> http://mailman.nginx.org/mailman/listinfo/nginx-ru > > > > > > > >-- > >WBR, > >Eugene Prokopiev > >_______________________________________________ > >nginx-ru mailing list > >nginx-ru@nginx.org > >http://mailman.nginx.org/mailman/listinfo/nginx-ru > > -- > Cheers, > Oleg A. Mamontov > > mailto: o...@mamontov.net > > skype: lonerr11 > cell: +7 (903) 798-1352 > _______________________________________________ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru -- WBR, Eugene Prokopiev _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru