Nginx不代理websockets(使用socket.io和nodejs)

时间:2015-10-19 06:52:43

标签: node.js nginx proxy websocket socket.io

我有一个在端口8000上运行的nodejs应用程序和以下nginx配置代理我的请求(http为8800,https为8443):

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    gzip  on;

    upstream node {
        server 127.0.0.1:8000;
    }

    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }


    server {
        listen               8800;
        access_log /usr/local/etc/nginx/access.log;
        error_log /usr/local/etc/nginx/error.log;
        rewrite_log on;

        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://node;
            proxy_redirect off;

            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
        }
    }

    server {
        listen               8443;
        ssl                  on;

        ssl_certificate      /usr/local/etc/nginx/server.crt;
        ssl_certificate_key  /usr/local/etc/nginx/server.key;
        ssl_session_timeout 5m;
        ssl_protocols  SSLv2 SSLv3 TLSv1;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers   on;

        access_log /usr/local/etc/nginx/access.log;
        error_log /usr/local/etc/nginx/error.log;
        rewrite_log on;

        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://node;
            proxy_redirect off;

            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
        }
    }
}

当我尝试在http://localhost:8800运行我的应用程序并检查Chrome开发工具时,websocket请求(ws:// localhost)会返回成功的101切换协议'。但是当我在https://localhost(使用自我认证的SSL证书)上运行时,相同的请求(wss:// localhost)不起作用

此外,当我尝试使用

调试nginx上的请求时
curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" http://localhost:8800/

 curl -i -N -k -H "Connection: Upgrade" -H "Upgrade: websocket" https://localhost:8443/

响应是502 Bad Gateway。

我想弄清楚为什么nginx没有正确代理请求。

0 个答案:

没有答案
相关问题