我正在尝试在Nginx反向代理服务器后面部署django频道支持的通知应用程序,以便只为websocket通信提供服务,同时让Nginx+uWSGI设置为django应用程序提供服务。在
当使用python manage.py runserver --noasgi
+daphne -p 8000 myproject.asgi:application
或{
问题:
所有websocket请求被路由到http
协议类型,而不是websocket
协议类型,并返回{
安装的软件包:
Django==2.0.3
channels==2.0.2
channels-redis==2.1.1
daphne==2.1.0
asgiref==2.3.0
Twisted==17.9.0
aioredis==1.0.0
autobahn==18.4.1
环境:
^{pr2}$升级请求的Nginx配置:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# the upstream component nginx needs to connect to websocket requests
upstream websocket {
server unix:/path/to/my/app/daphne.sock;
}
# configuration of the server
server {
# the port your site will be served on
listen 80;
# the domain name it will serve for
server_name ip_address;
charset utf-8;
# Sending all non-media requests for websockets to the Daphne server.
location /ws/ {
proxy_pass http://websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
路由.py
from django.conf.urls import url
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
from myapp import consumers
application = ProtocolTypeRouter({
'websocket': AuthMiddlewareStack(
URLRouter([
url(r'^ws/$', consumers.MyConsumer),
])
),
})
达芙妮日志:
None - - [TimeStamp] "GET /ws/" 404 3
None - - [TimeStamp] "GET /ws/" 404 3
None - - [TimeStamp] "GET /ws/" 404 3
如果需要其他帮助,请告诉我。在
注:我在两个服务器上部署了相同的应用程序(两个服务器都具有与上述相同的配置和环境),结果是一样的。在
最后我发现罪魁祸首是我公司的防火墙,当通过
http
访问应用程序时,防火墙会剥离升级头文件。因此,在将http
升级到https
之后,它开始按预期工作。在相关问题 更多 >
编程相关推荐