我想檢查 url 中是否存在名為“token”的引數并且不為空。根據測驗結果,我想redirect或使用proxy_pass.
例子:
| 網址 | 地位 |
|---|---|
| https://example.com/application/foo?token=123 | proxy_pass |
| https://example.com/application/foo?token=&bar="abcde" | 重定向 |
| https://example.com/application/foo?bar="abcde" | 重定向 |
| https://example.com/application/foo?token= &bar="abcde" | 重定向 |
我目前的配置:
location /application/foo {
if ($arg_token) {
proxy_pass http://127.0.0.1:8512/application/foo;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
return 302 https://example.com/?application=foo&$args;
}
但它回傳以下錯誤:
nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular expression, or inside named location, or inside "if" statement, or inside "limit_except" block
我檢查這個問題,關于上述錯誤,但它解釋了行為location的指令,而不是為if秒。
我嘗試使用if 測驗的否定,但無法做出所需的行為或沒有錯誤。我也知道ifs 在 nginx 中是邪惡的,但我對 nginx 的了解不夠,無法以不同的方式做我想做的事。
uj5u.com熱心網友回復:
該if內location最好限制在執行return或rewrite陳述句,在這里建議。
在 Nginx 中,未定義或空引數都計算為空字串,因此您可以使用= ""來反轉if陳述句的邏輯。從而將return陳述句移到塊內,將proxy_pass陳述句移到塊外。
例如:
location /application/foo {
if ($arg_token = "") {
return 302 https://example.com/?application=foo&$args;
}
proxy_pass ...;
...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/377405.html
