将 nginx 绑定到 tcp 和 http 的同一端口上

将 nginx 绑定到 tcp 和 http 的同一端口上

我按照以下指南使用 tcp_proxy_module 编译了 nginx:https://stackoverflow.com/questions/12102110/nginx-to-reverse-proxy-websockets-and-enable-ssl-wss

我想要做的是能够转发:

TCP  url1.com:443 --forward to websocket--> 1234
HTTP url2.com:443 proxy localhost:1235
HTTP url3.com:443 proxy localhost:1236

HTTP 部分按预期工作,因为它是不同的 server_name。但问题出在 TCP 代理上,我得到:

启动 nginx:nginx:[emerg] bind() 至 0.0.0.0:443 失败(98:地址已在使用中)

我将怎样实现这个目标?

-- 编辑:来自模块的 githubhttps://github.com/yaoweibin/nginx_tcp_proxy_module

不能与 HTTP 模块使用相同的监听端口。

答案1

正如你提到的,来自文档

注意,您不能与 HTTP 模块使用相同的监听端口。

所以,你想做的事是不可能的。


一个选项是在您的网络接口上设置第二个 IP 地址。

假设:

  • 192.168.0.10是主 IP(将为您的 HTTPS 网站提供服务)
  • 192.168.0.20是辅助 IP(将为您的 TCP websocket 提供服务)

    tcp {
       upstream websockets {
         ....
       }
       server {
         server_name url1.com;
         listen 192.168.0.20:443;
       }
    }
    
    http {
       server {
          server_name  url2.com;
          listen 192.168.0.10:443;
          ....
       }
    
       server {
          server_name  url3.com;
          listen 192.168.0.10:443;
          ....
       }
     }
    

相关内容