你好我想要反向代理我的 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 块内的唯一块。这是因为 location 块是按顺序处理的,而外部 location 块中的 return 404 语句将阻止处理与内部 location 块匹配的任何请求。因此,您需要将 return 404 语句移到与带有端口号的 URL 匹配的 location 块内,并将其更改为 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;