我正在努力實現這樣的目標:
location /location1/{
if ($arg_api_key = a_valid_api_key) {
proxy_pass http://localhost:8080;
}
# else jump to location2
}
location /location2/{
# a lot of validation code here
}
我們在nginx中怎麼做呢?或者有更好的處理方法嗎?
答案1
首先,請記住如果是邪惡的並避免在裡面放rewrite
任何return
東西if
;建議的解決方法是使用error_page
和return
更改用於處理請求的位置。
作為已經在這裡回答了,在 nginx 中重複使用位置設定的方法是將它們移動到單獨的檔案中,並將include
該檔案移到您的location
區塊中。
結合這些解決方案會產生:
/etc/nginx/validation_code.conf
# a lot of validation code here
主要配置
location /location1/ {
error_page 418 = @proxy;
recursive_error_pages on;
if ($arg_api_key = a_valid_api_key) {
return 418;
}
include /etc/nginx/validation_code.conf;
}
location /location2/ {
include /etc/nginx/validation_code.conf;
}
location @proxy {
proxy_pass http://localhost:8080;
}
您也可以考慮為驗證程式碼使用命名位置,而不是建立單獨的檔案;但是,您將需要一些技巧來切換到該指定位置 - 例如,另一個error_page
/return
對,或類似的東西
try_files /nonexistent @validation