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 块内的唯一块。这是因为 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;
   

相关内容