所以我已经用头撞墙两天了,请帮忙。
我正在尝试使用此建立Websocket连接django-websocket-reis配置。有两个运行uwsgi的实例,一个用于网站,另一个用于websocket通信。
我大量使用wireshark来了解到底发生了什么,显然nginx正在吃掉标题"Connection:Upgrade"one_answers"Upgrade:websocket"。
以下是nginx配置的关键部分:
upstream websocket {
server 127.0.0.1:9868;
}
location /ws/ {
proxy_pass_request_headers on;
access_log off;
proxy_http_version 1.1;
proxy_pass http://websocket;
proxy_set_header Connection "Upgrade";
proxy_set_header Upgrade websocket;
}
正如您在这两张屏幕截图中看到的,内部通信的tcpdump显示握手工作得很好。但在我的浏览器(第二张图片)中,标题丢失了。
任何想法都将不胜感激。我真的被困在这里了:(
版本:
nginx - 1.7.4
uwsgi - 2.0.7
pip冻结:Django==1.7MySQL python==1.2.5django-redis会话==0.4.0django websocket redis==0.4.2gevent==1.0.1greenlet==0.4.4redis==2.10.3六==1.8.0uWSGI==2.0.7wsgiref==0.1.2
我会使用gunicorn来部署django应用程序,但无论如何。
我记得我在gunicorn文档上看到过这个:
如果您希望能够处理流式请求/响应或其他Comet、Long轮询或Web套接字等奇特功能,您需要关闭代理缓冲。当你这样做的时候,你必须带着一个异步工作程序类的。
要关闭缓冲,只需要添加proxy_braining-off;到您的位置块:
在您的位置将是:
location /ws/ {
proxy_pass_request_headers on;
access_log off;
proxy_http_version 1.1;
proxy_redirect off;
proxy_buffering off;
proxy_pass http://websocket;
proxy_set_header Connection "upgrade";
proxy_set_header Upgrade websocket;
}
链接到gunicorn在nginx中部署的指南。http://docs.gunicorn.org/en/latest/deploy.html?highlight=header
希望这能帮助