CNode

[求助]怎样设置 Nginx 让 Node 能正常运行 socket.io ?

Jjiyinyiyong发布于14 年前最后回复14 年前13 回复15377 浏览0 收藏

刚开始我访问 sockets.jiyinyiyong.info 并在浏览器里连接 socket 没有成功, 浏览器端出现报错

Error during WebSocket handshake: 'Connection' header value is not 'Upgrade'

服务器上的信息是:

a connection
   debug - websocket writing 5:::{"name":"cast"}
   debug - websocket writing 5:::{"name":"cast"}
   debug - websocket writing 5:::{"name":"cast"}
   debug - websocket writing 5:::{"name":"cast"}
   debug - websocket writing 5:::{"name":"cast"}
   debug - websocket writing 5:::{"name":"cast"}
   debug - websocket writing 5:::{"name":"cast"}
   debug - websocket writing 5:::{"name":"cast"}
   debug - websocket writing 5:::{"name":"cast"}
   debug - websocket writing 5:::{"name":"cast"}
   debug - setting request GET /socket.io/1/xhr-polling/11404802851312554938?t=1344062033928
   debug - setting poll timeout
   debug - discarding transport
   debug - cleared heartbeat interval for client 11404802851312554938
   debug - clearing poll timeout
   debug - xhr-polling writing 5:::{"name":"cast"}
   debug - set close timeout for client 11404802851312554938

我搜到的问题大致说浏览器那个错误是因为 header 被破破坏了.. http://stackoverflow.com/questions/6576403/websocket-handshake-failing-in-webkit-with-socket-io-0-7 http://stackoverflow.com/questions/6769342/websockets-handshake-problem 就怀疑到 Nginx 上去了, 想起来以前也遇到过.. 就测试 jiyinyiyong.info:8000 去访问, 也 io.connect() 这个网址, 再就能显示了.. 照这样问题就出在 Nginx 的配置上边了, 不怎么懂 Nginx, 求助啊, 下面是我出错的时候的配置:

upstream sockets {
    server 127.0.0.1:8005;
}

server {
    listen 0.0.0.0:80;
    server_name sockets.jiyinyiyong.info;
    access_log /var/log/nginx/sockets.log;

    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy true;

      proxy_pass http://sockets;
      proxy_redirect off;
    }
 }
查看回复

回复 (11)

S
sunmage#1·14 年前

nginx现在是不支持websocket的吧

J
jiyinyiyong#2·14 年前

@sunmage : 是ei.. 好像昨天搜到过说 1.3 有个 patch 支持, 我才 1.2 . 晕了 不过 socket.io 是支持没有 WebSocket 时候替换长链接的啊, 也不应该就端口号出问题

J
jiyinyiyong#3·14 年前
S
sunmage#4·14 年前
引用 jiyinyiyong@sunmage : 是ei.. 好像昨天搜到过说 1.3 有个 patch 支持, 我才 1.2 . 晕了 不过 socket.io 是支持没有 WebSocket 时候替换长链接的啊, 也...

我之前测试了下 nginx 的 1.3.4 development 版,也不支持 websocket...... 要用nginx的话,还是用这样的解决办法

Y
yaryin#6·14 年前
引用 jiyinyiyong@sunmage : 是ei.. 好像昨天搜到过说 1.3 有个 patch 支持, 我才 1.2 . 晕了 不过 socket.io 是支持没有 WebSocket 时候替换长链接的啊, 也...

hi @sunmage , 我使用你那个网址的方法,一直没成功,好像是编译的跟通过 apt-get install 安装的目录不一样,你是怎么解决的。

S
sunmage#7·14 年前
引用 jiyinyiyong@sunmage : 是ei.. 好像昨天搜到过说 1.3 有个 patch 支持, 我才 1.2 . 晕了 不过 socket.io 是支持没有 WebSocket 时候替换长链接的啊, 也...

hi~ @yaryin,我不清楚你是在哪里报错了。我当时就是按照 https://github.com/yaoweibin/nginx_tcp_proxy_module#readme 的方法,把里面patch和configure 的路径换成你下载的位置就可以了。

W
waylon#8·14 年前

今天我也遇到这个问题了 我用域名链接,就会出现那个问题...不过后来改成用IPl链接解决了.. 还不知道具体原因,求解答...

W
waylon#9·14 年前

nginx反向代理到8080端口试试 locaton ~/ { proxy_pass:127.0.0.1:8080} ,参照网上一些实例

参与回复
登录后即可参与回复。登录