[英]Django channels websocket connecting and disconnecting (Nginx + Daphne + Django + Channels)
我在使用 Nginx + Gunicorn + Daphne + Django 的生产虚拟机中部署它时遇到问题。 我一直在本地虚拟机中对其进行测试,它可以正常工作,但在生产中,套接字正在连接和断开连接。 我附上了我的 nginx 配置,asgi.py 和 routing.py。 我使用命令````$ daphne -p 8010 project.asgi:application```在这里输入图片描述
# Nginx config
upstream test_project {
server localhost:8001;
}
upstream test_project_websocket {
server localhost:8002;
}
server {
listen 1881;
location / {
proxy_pass http://test_project;
}
location /ws/ {
proxy_pass http://test_project_websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_redirect off;
}
proxy_set_header Host $host;
}
#asgi.py
import os
import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'WebServer.settings')
django.setup()
from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter
import Andon.routing # app.routing
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.layers import get_channel_layer
application = ProtocolTypeRouter({
"http": get_asgi_application(),
"websocket": AuthMiddlewareStack(
URLRouter(
Andon.routing.websocket_urlpatterns,
),
),
})
# routing.py
from django.urls import path, re_path
from . import consumers
from channels.layers import get_channel_layer
websocket_urlpatterns = [
re_path(r'ws/andon/$', consumers.AndonConsumer.as_asgi()),
]
编辑 27-11-20:还没有解决,但发现了一些有趣的东西。 如果您使用的是旧版本的 redis,请确保您拥有以下版本:
channels==3.0.2
channels-redis==2.4.1
编辑 27-11-20:部分解决我想我的 nginx 配置有一些问题,因为如果我尝试直接连接到 daphne 端口,它工作得很好,但如果我从 nginx 重定向流量,它不会
编辑 16-12-20:解决方案我有一个旧版本的 nginx 1.10,我将它升级到 1.16 并且没有任何问题,使用这篇文章的配置:配置
这是您要找的配置
# Connecting to daphne socket
upstream test_project_websocket {
server localhost:8010;
}
....
# Notice the "/" at then end of location & proxy_pass url
location /ws/ {
proxy_pass http://test_project_websocket/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
location / {
proxy_pass http://test_project;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.