我正在使用 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,我想使用正则表达式来动态使用包含端口号的 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 [错误] 6188#0: *3584 没有定义解析器来解析本地主机,客户端:{my-client-ip},服务器:本地主机,请求:“GET /2222/HTTP/1.1 ", 主机: "{nginx-ip}"
当我使用127.0.0.1
而不是localhost
我得到一个 404. 网页说
未找到 在此服务器上未找到请求的 URL /2222/。
我正在尝试使用 nginx 配置吗?
重申一下,我希望能够通过 nginx Web 服务器启动许多(数千个)独特的反向隧道。我最初的想法是根据我想要代理的其他 Web 应用程序来改变 nginx 服务器的传出端口,并通过 URI 中的端口将对我的 nginx 服务器的请求分配给不同的端口(通过正则表达式提取) .