Der*_*dan 7 django nginx websocket uwsgi
所以我在2天的大部分时间里一直撞到墙上,请帮忙.
我正在尝试使用此django-websocket-redis配置建立Websocket连接 .有两个uwsgi运行实例,一个用于网站,一个用于websocket通信.
我大量使用wireshark来找出究竟发生了什么,显然nginx正在吃标题"Connection:Upgrade"和"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;
}
Run Code Online (Sandbox Code Playgroud)
正如您在这两个屏幕截图中看到的那样,内部通信的tcpdump显示握手工作正常.但在我的浏览器(第二张图片)中,标题丢失了.
任何想法都非常感谢.我真的被困在这里:(
版本:
nginx - 1.7.4
uwsgi - 2.0.7
Run Code Online (Sandbox Code Playgroud)
pip freeze:Django == 1.7 MySQL-python == 1.2.5 django-redis-sessions == 0.4.0 django-websocket-redis == 0.4.2 gevent == 1.0.1 greenlet == 0.4.4 redis == 2.10.3六== 1.8.0 uWSGI == 2.0.7 wsgiref == 0.1.2
我会使用 Gunicorn 来部署 django 应用程序,但无论如何。
我记得我在gunicorn文档上看到过这个:
如果您希望能够处理流请求/响应或其他奇特功能(如 Comet、长轮询或 Web 套接字),则需要关闭代理缓冲。当您执行此操作时,您必须使用异步工作线程之一运行。
要关闭缓冲,只需要添加 proxy_buffering 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;
}
Run Code Online (Sandbox Code Playgroud)
链接到gunicorn在nginx中部署的指南。 http://docs.gunicorn.org/en/latest/deploy.html?highlight=header
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
1925 次 |
| 最近记录: |