嗨,我想要反向代理我的 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;