Nginx 无法正确代理 websocket

Nginx 无法正确代理 websocket

使用 nginx 的开发版本(1.3.12)。在我的 sites-enabled 下的相关文件中:

upstream twisted {
    server 127.0.0.1:8088;
}

server {  

    listen   80; ## listen for ipv4  

    server_name  *.clurn.co.uk clurn.co.uk;  

    access_log  /var/log/nginx/clurn.co.uk.access.log;  

    location / {  
            root   /var/www/clurn.co.uk;  
            index  index.html index.htm;  

    }  

    location /websocket {  
            proxy_pass http://twisted;  
            proxy_http_version 1.1;  
            proxy_set_header Upgrade $http_upgrade;  
            proxy_set_header Connection "Upgrade";  
    }  

    location /websocket/server {  
            deny all;  
    }  

    [...snip...]
}

唯一不同的是nginx 网站上的示例大写字母 u 是否在升级,这似乎是高速公路和/或发送状态实例来正确识别 websocket(我不记得它现在是哪一个了)。

127.0.0.1:8088现在,如果我通过服务器访问 websockets ,那么它似乎可以工作,但如果我通过它访问它127.0.0.1/websockets,它就不工作,所以通过 nginx 编组数据包一定有问题。

如果我运行的netcat -l -p 8088不是 Twisted websocket 后端,我可以看到,通过 nginx 或直接访问时,请求是相同的(最初它们不是,但将“upgrade”更改为“Upgrade”使标题行Connection: Upgrade相同),所以这部分代理正确。

但是,如果我通过 telnet 进入127.0.0.1:8088127.0.0.1/websocket,复制并粘贴正确的请求,我会直接得到 的响应127.0.0.1:8088,而 不会得到 的响应127.0.0.1/websocket。我做错了什么,如何设置才能允许双方使用 websocket?

答案1

我认为问题在于缓冲。设置:

proxy_buffering off;

在 websocket 位置配置内。

相关内容