![多服务不同端口如何配置nginx代理](https://linux22.com/image/773885/%E5%A4%9A%E6%9C%8D%E5%8A%A1%E4%B8%8D%E5%90%8C%E7%AB%AF%E5%8F%A3%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AEnginx%E4%BB%A3%E7%90%86.png)
我有以下结构:
公共 IP <-> 虚拟机主机 <-> 虚拟机
有两个 vm:vm1_proxy_nginx vm2_service_docker_vm(使用端口 9000-9005)
Service_VM 是一个仪表板服务器,在公开端口 9001、9002 和 9005 上工作,用于用户和虚拟机之间的身份验证、登录和数据记录通信。
现在我在 nginx 反向代理 http 和 https 中重定向到 /9001 进行登录。
然后我发现这种配置会导致问题,因为没有给出通信反馈(登录成功后,服务器重定向到 9002 仪表板服务)
https://ip.ip.ip.io:9002/?token=
有人知道如何处理这个问题而不失去安全性和 SSL 问题吗?
我知道重新实现服务不会使用这样的暴露端口,但同时我需要一个解决方案......
答案1
解决此问题的最简单方法是保留所有标准端口,并在配置中创建 2 个服务器块,每个端口一个,充当将所有流量转发到目标端口的反向代理。例如:
server {
listen 9001 ssl http2;
ssl_certificate *path-to-certificate*;
ssl_certificate_key *patch-to-private-key;
server_name xyz.yourdomain.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://*ipofupstreamserver*:9001;
}
server {
listen 9002 ssl http2;
ssl_certificate *path-to-certificate*;
ssl_certificate_key *patch-to-private-key;
server_name xyz.yourdomain.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://*ipofupstreamserver*:9002;
}
server {
listen 9005 ssl http2;
ssl_certificate *path-to-certificate*;
ssl_certificate_key *patch-to-private-key;
server_name xyz.yourdomain.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://*ipofupstreamserver*:9005;
}
当然,您可能需要调整是否要使用 http 或 https 进行上游通信,或者您可以将显示登录界面的前端放到标准端口 443 上(如果它应该面向公众),并且还有大量其他选项可以调整,但这应该可以帮助您入门。