我們可以從nginx中的一個位置跳到另一個位置嗎?

我們可以從nginx中的一個位置跳到另一個位置嗎?

我正在努力實現這樣的目標:

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_pagereturn更改用於處理請求的位置。

作為已經在這裡回答了,在 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

相關內容