用於更改連接埠的 Nginx 反向代理基本 URI

用於更改連接埠的 Nginx 反向代理基本 URI

嗨,我想要反向代理我的 Nginx 基本端口,例如

http://example.com:443/ips/8443 -> http://example.com:8443/ips/8443
http://example.com:443/ips/23950 -> http://example.com:23950/ips/23950

如果支持的話就更好了,不過不是強制的

http://example.com:443/ips/23950/xyz -> http://example.com:23950/ips/23950/xyz

這是我的配置

    location ~ /ips/([0-9]+)(/|)(\S+|)$ {
            proxy_pass http://127.0.0.1:$1/$3;
    }

我不太了解 nginx 中的 REGEX,但我可以說,我已經盡力了

答案1

要解決此問題,您需要更新 proxy_pass 指令以在代理請求中包含完整的 URL 路徑。這可以透過使用 $request_uri 變數來完成,該變數包含傳入請求的完整 URL 路徑。

以下是更新後的 proxy_pass 指令的範例:

proxy_pass http://127.0.0.1:$1$request_uri;

這會將請求連同傳入請求的完整 URL 路徑一起傳遞到本機連接埠。因此,對 /ips/23950/xyz 的請求將被代理到http://127.0.0.1:23950/xyz,這應該允許本地伺服器正確處理請求。

另外值得注意的是,包含 proxy_pass 指令的 location 區塊應該是 location /ips 區塊內的唯一區塊。這是因為位置區塊是依序處理的,外部位置區塊中的 return 404 語句將阻止處理與內部位置區塊相符的任何請求。因此,您需要將 return 404 語句移至與 URL 和連接埠號碼相符的位置區塊內,並將其變更為 return 403 或其他一些指示不允許要求的 URL 的錯誤代碼。

以下是更新配置的範例:

location ~ ^/ips/([0-9]+) {
    proxy_redirect off;
    proxy_pass http://127.0.0.1:$1$request_uri;
    proxy_http_version 1.1;
   

相關內容