我在配置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