加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

使用协议升级在nginx反向代理后面运行daphne始终路由到http而不

发布时间:2020-12-13 21:31:41 所属栏目:Nginx 来源:网络整理
导读:我正在尝试在Nginx反向代理服务器后面部署django通道支持的通知应用程序,以仅为websocket通信提供服务,同时让Nginx uWSGI设置为django应用程序提供服务. 当使用python manage.py runserver noasgi daphne -p 8000 myproject.asgi:application或python manag

我正在尝试在Nginx反向代理服务器后面部署django通道支持的通知应用程序,以仅为websocket通信提供服务,同时让Nginx uWSGI设置为django应用程序提供服务.

当使用python manage.py runserver –noasgi daphne -p 8000 myproject.asgi:application或python manage.py runserver与daphne内部处理所有请求一起运行时,该应用程序可在我的本地机器上无缝工作.

问题:

所有websocket请求都被路由到http协议类型而不是websocket协议类型,它返回WebSocket连接到’ws:// ip_address / ws /’失败:WebSocket握手期间出错:意外响应代码:404

已安装的软件包:

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

环境:

Ubuntu - 16.04
Nginx - 1.12.0

用于升级请求的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;
        }

}

routing.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

如果有任何其他需要帮助,请告诉我.

P.S:我在两台服务器中部署了相同的应用程序(两者都具有与上面相同的配置和环境),结果相同.

最佳答案
最后我发现罪魁祸首是我公司的防火墙,当通过http访问应用程序时,它正在剥离升级头.因此,在将http升级到https之后,它开始按预期工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读