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

Ответить