gpt4 book ai didi

reverse-proxy - 使用 nginx 正则表达式位置匹配将 URI 动态映射到多个反向代理的不同端口

转载 作者:行者123 更新时间:2023-12-01 12:28:07 26 4
gpt4 key购买 nike

我正在使用 nginx 为可能位于防火墙后面的 Web 应用程序创建反向代理。对于我最初的概念证明,我使用了以下位置块来确保它有效。

    location / {
proxy_pass https://localhost:2222;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}

我使用 ssh -f -N -T -R2222:localhost:443 user@nginx-ip 在我的网络应用程序上打开我的反向隧道.
这完全符合我的喜好。我输入我的 nginx-ip进入我的浏览器,我从我的网络应用程序获取 https 流量,但被 nginx-ip 混淆了, 等等。

我想允许潜在的几千个反向隧道跨越几千个端口(而不是在上面的情况下只有 2222 个)。阅读 nginx, I thought to use regular expressions动态使用包含端口号的 URI 来 proxy_pass 到该特定端口。

也就是说,我想要 https://nginx-ip/2222/proxy_pass https://localhost:2222;我想要 https://nginx-ip/1111/proxy_pass https://localhost:1111; .

我已经尝试了很多变体,但据我所知,我认为这应该可行:
    location ~* ^/(\d+) {
proxy_pass https://localhost:$1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}

它没有。我在浏览器中收到一个 502 Bad Gateway,错误日志给了我:

2016/05/31 21:02:36 [error] 6188#0: *3584 no resolver defined to resolve localhost, client: {my-client-ip}, server: localhost, request: "GET /2222/ HTTP/1.1", host: "{nginx-ip}"



当我使用 127.0.0.1而不是 localhost我得到一个 404。网页上说

Not Found The requested URL /2222/ was not found on this server.



我正在尝试使用 nginx 配置可能吗?

重申一下,我希望能够通过 nginx Web 服务器启动许多(数千个)独特的反向隧道。我最初的想法是根据我想要代理的其他 Web 应用程序来改变 nginx 服务器的传出端口,并通过 URI 中的端口将请求分配给我的 nginx 服务器到不同的端口(通过正则表达式提取) .

最佳答案

为了解决我的问题,在@Cirdec 的帮助下,我最终走向了不同的方向。

我没有使用 URI 中的路径来引用端口,而是成功地将端口用作子域。即,1111.my-host-name将通过 127.0.0.1 上的反向代理发送东西( localhost ) 在端口 1111 上.这需要使用一些 DNS 通配符来帮助处理一些繁重的列表(注意:/etc/hosts 中的通配符 DNS 匹配将不起作用,但您可以硬编码一些条目来测试它是否有效。

摘自我的 /etc/hosts文件:

nginx-box-ip-address     2222.my-host-name
nginx-box-ip-address 1111.my-host-name

这与 nginx 配置配对:
server {
listen 443;
server_name ~^(?<port_subdomain>[0-9]*).my-host-name$;

# NOTE: omitted extra ssl configuration lines

location / {
proxy_pass https://127.0.0.1:$port_subdomain;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}

现在我可以让我的 Web 应用程序打开反向代理隧道到我的 nginx 框(我的主机名)上的任意端口,并通过子域访问它们。

一步一步的例子:
  • 在我的一个 Web 应用程序框中,我打开了一个到端口 2222 的反向隧道。在我的 nginx 盒子(我的主机名)上使用 ssh -f -N -T -R2222:localhost:443 user@my-host-name
  • 在不同的 Web 应用程序框上,我可以打开通向同一个 nginx 框(我的主机名)的不同隧道,例如端口 1111通过运行 ssh -f -N -T -R1111:localhost:443 user@my-host-name在不同的 Web 应用程序框中
  • 在我的 nginx 机器上,我已经加载了上面的配置。我打开 chrome 并点击 2222.my-host-name就好像我直接点击了我的网络应用程序框的 URL/IP 地址(由于反向代理,只有它可以位于防火墙后面)。打1111.my-host-name带我到另一个 web 应用程序框,它是完全独立的,并通过一个完全独立的隧道。
  • 关于reverse-proxy - 使用 nginx 正则表达式位置匹配将 URI 动态映射到多个反向代理的不同端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37555674/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com