在nginx反向代理后面运行daphne并进行协议升级,总是路由到http而不是web

2024-10-16 20:40:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在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

如果需要其他帮助,请告诉我。在

注:我在两个服务器上部署了相同的应用程序(两个服务器都具有与上述相同的配置和环境),结果是一样的。在


Tags: thetodjangofromimport应用程序httpws