Nginx 是基於參數中的關鍵字進行重新導向

Nginx 是基於參數中的關鍵字進行重新導向

我對 nginx 非常陌生(大約 1 天),我們使用它作為一些應用程式的反向代理。我們將添加另一個應用程式來處理一小部分現有請求。我正在嘗試攔截命中 cod/articles API 並在參數中包含 item.id 的 url,然後將這些請求及其參數發送到這個新應用程序,因為它尚未準備好,所以我暫時對其進行了存根處理。

我想保留所有其他請求,即 API 不是“/cod/acticles”,請求參數中不包含 item.id。

應發送到新應用程式的範例 url。

http://server/mdata/transfer/CUSTOMER/cod/articles?filter={"item.id":"ID00000000123"......}&limit=50&fields=[]&sort=.......

不應發送的範例網址。

http://server/mdata/transfer/customer/cod/articles?filter{"lang":"en_US","article.id":"123456"}&limit=50....
http://server/mdata/transfer/customer/cod/items?filter{"lang":"en_US","article.id":"123456"}&limit=50....
http://server/mdata/transfer/customer/doc/articles?filter{"lang":"en_US","article.id":"123456"}&limit=50....

注意:....只是意味著還有其他參數

下面是我目前在 Nginx 中的設定。它似乎進行了“攔截”,但有一些事情在我看來是錯誤的。

首先,我認為使用“if”並不理想,可能有更好的方法來做到這一點。但我還沒有成功匹配參數部分。

其次,nginx 存取日誌顯示對符合 url 的 3 個請求。 x2 301 響應和 1 200 響應。這是預期的嗎?如果是這樣,是否有更好的方法來做到這一點,以便只有 1 個請求,因為看起來我已經為 nginx 創建了額外的負載。

#existing config for all /mdata/transfer/* APIs
location /mdata/transfer/ {
        add_header Access-Control-Allow-Origin *;
        allow all;
        proxy_pass        http://mds;
}

#static page which acts as a stub end point for testing.
location /proxyapp {
        root /opt/www;
}

#new config where I try to intercept /mdata/transfer/customer/cod/articles API with item.id contained in the arguments.
location ~ /mdata/transfer/customer/cod/articles {
        set $cst_proxy mds/mdata/transfer/customer/cod/articles;
        if ($args ~ "item.id") {
                set $cst_proxy localhost/proxyapp;
        }
        proxy_pass http://$cst_proxy$is_args$args;
        proxy_redirect off;
}

答案1

用下面的程式碼解決了

   upstream proxy-app {
    server 127.0.0.1:4000;
}

upstream mds {
    server 127.0.0.1:1234;
}

location /mdata/transfer/CUSTOMER/cod/articles {
        add_header Access-Control-Allow-Origin *;
        set $cst_proxy mds;
        if ($args ~ "item.id") {
                set $cst_proxy proxy-app;
        }
        proxy_pass http://$cst_proxy;
}

相關內容