Хоча ви могли б досягти цього за допомогою if
, це, як правило, відлякує документацію Nginx , тому if
що не добре поєднується з іншими директивами. Наприклад, припустимо, що GET має бути відкритим для всіх, тоді як POST призначений лише для автентифікованих користувачів, які використовують HTTP Basic Auth. Це вимагатиме if
поєднання auth_basic
, яке не працює належним чином.
Ось альтернатива, яка працює без if
. Трюк полягає у використанні "GET" та "POST" як частини імен висхідного потоку, тому їх можна вирішити за допомогою змінної підстановки:
http {
upstream other_GET {
server ...;
}
upstream other_POST {
server ...;
}
server {
location /service {
proxy_pass http://other_$request_method;
}
}
}
Щоб поєднати це з HTTP Basic Auth для всього, крім GET, просто додайте limit_except
блок:
...
location /service {
proxy_pass http://other_$request_method;
limit_except GET {
auth_basic ...;
}
}
...