Route by request method

Oleg A. Mamontov oleg на mamontov.net
Пн Фев 8 21:24:02 UTC 2021


On Mon, Feb 08, 2021 at 07:15:43PM +0300, Eugene Prokopiev wrote:
>Здравствуйте!
>
>Требуется по GET /data.txt отдавать самый файл как есть, а по
>POST/PUT/DELETE /data.txt передавать запрос в какой-то бакенд через
>proxy_pass - по идее не самый редкий кейс, но никакого пример
>нагуглить не могу. Попробовал сделать так:
>
>location / {
>    if ($request_method = 'GET') {
>        root /data;
>    }
>    proxy_pass http://127.0.0.1:8080;
>}
>
>Но в if ничего не попадает. Я что-то делаю не неправильно? Или это
>вообще принято делать иначе?

"Традиционный" подход - сделать по требуемому условию 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/;
}
---

>-- 
>WBR,
>Eugene Prokopiev
>_______________________________________________
>nginx-ru mailing list
>nginx-ru at nginx.org
>http://mailman.nginx.org/mailman/listinfo/nginx-ru

-- 
Cheers,
Oleg A. Mamontov


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