Route by request method

Oleg A. Mamontov oleg на mamontov.net
Вт Фев 9 12:52:23 UTC 2021


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, Илья Шипицин <chipitsine at gmail.com>:
>>
>> можно на limit_except разрешить только GET. остальное попадет в запрет и навешать на него кастомную страницу ошибки
>>
>> вт, 9 февр. 2021 г. в 13:17, Oleg A. Mamontov <oleg at 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 at nginx.org
>>> >http://mailman.nginx.org/mailman/listinfo/nginx-ru
>>>
>>> --
>>> Cheers,
>>> Oleg A. Mamontov
>>>
>>> mailto: oleg at mamontov.net
>>>
>>> skype:  lonerr11
>>> cell:   +7 (903) 798-1352
>>> _______________________________________________
>>> nginx-ru mailing list
>>> nginx-ru at nginx.org
>>> 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
>
>
>
>-- 
>WBR,
>Eugene Prokopiev
>_______________________________________________
>nginx-ru mailing list
>nginx-ru at nginx.org
>http://mailman.nginx.org/mailman/listinfo/nginx-ru

-- 
Cheers,
Oleg A. Mamontov

mailto: oleg at mamontov.net

skype:  lonerr11
cell:   +7 (903) 798-1352


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