[英]nginx - Proxy to a different backend based on query param
我有一個案例,我想根據查詢參數的存在將特定調用代理到不同的后端。 以下是我開始的內容
location ~ ^/abc/xyz/?$ {
proxy_pass $backend_url;
}
我想要做的是檢查查詢參數 foo (甚至只是該字符串在任何地方的存在)。 所以我想我可以做到這一點
location ~ ^/abc/xyz/?$ {
set $backend_url "somelocation"
if ($request_url ~ .*foo.*) {
set $backend_url "someotherlocation"
proxy_pass $backend_url
}
proxy_pass $backend_url;
}
但這似乎並沒有真正代理到新位置。 我的代碼做錯了什么,還是整個方法都錯了?
我不知道你為什么使用兩個proxy_pass
指令,這個塊應該按照你描述的邏輯來做:
location ~ ^/abc/xyz/?$ {
set $backend_url "somelocation";
if ($request_url ~ \?(.*&)?foo(=|&|$)) {
set $backend_url "otherlocation";
}
proxy_pass $backend_url;
}
我稍微修改了您的正則表達式以僅匹配請求 URL,其中foo
是查詢參數名稱而不是查詢參數值(或其部分)。 但是我更願意為此使用map
指令(map 塊應該放在 server 塊之外):
map $arg_foo $backend_url {
"" somelocation; # if the value is empty
default otherlocation; # otherwise
}
server {
...
location ~ ^/abc/xyz/?$ {
proxy_pass $backend_url;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.