我在配置nginx代理websockets时遇到了一些麻烦。我有一个node.js应用程序,它使用socket.io v0.9.16监听端口9090上的连接,监听端口9000上的nginx v1.6.2,并且(据说)配置为将请求代理到我的node.js应用程序中。 nginx的配置如下:nginx配置socket.io/websockets
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 9000;
server_name mysite.com;
location/{
root /var/www/mysite/web;
}
location /socket.io/ {
proxy_pass http://localhost:9090;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
我敢肯定的问题是与nginx的,因为如果我直接访问我的节点的应用程序端口9090,然后在两者的/var/www/mysite/web
静态内容和WebSockets的做工精细,但如果我尝试通过端口9000上的nginx,然后只有静态内容得到正确的服务。
Chrome开发工具显示,socket.io(http://my.ip.add.ress:9000/socket.io/1/?t=1414606847141)的初始请求被浏览器取消(我试过Firefox和Safari,结果类似)。
这可能是一个安全问题?浏览器是否“知道”socket.io在端口9090上运行并拒绝通过9000连接它?我很难过,任何帮助将不胜感激。
确实ip_hash提供任何好处,如果你没有负载均衡?我只在1台服务器上运行我的应用程序 – codebox 2014-10-30 11:09:18
是的,客户端可以连接到不同的服务器上,并且每当一台服务器出现故障时,您就可以在不加载静态内容的情况下向下一台服务器发送消息。 – Darkerz 2014-10-30 11:16:40