使用 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:8088
和127.0.0.1/websocket
,复制并粘贴正确的请求,我会直接得到 的响应127.0.0.1:8088
,而 不会得到 的响应127.0.0.1/websocket
。我做错了什么,如何设置才能允许双方使用 websocket?
答案1
我认为问题在于缓冲。设置:
proxy_buffering off;
在 websocket 位置配置内。