我按照以下指南使用 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; .... } }