You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure App Service部署Django应用WebSocket连接问题排查

Django + Azure App Service WebSocket 连接问题排查思路
  • 确认Azure App Service的WebSocket开关已启用
    登录Azure门户,进入你的App Service -> 设置 -> 配置 -> 常规设置,找到WebSocket选项,确保设置为启用。这是Azure App Service支持WebSocket的核心前提,默认可能处于关闭状态。

  • 检查ASGI配置与启动命令
    Django Channels依赖ASGI而非WSGI,部署时必须使用ASGI服务器(如Daphne):

    1. 确保项目根目录下的asgi.py配置正确,示例如下:
      import os
      from django.core.asgi import get_asgi_application
      from channels.routing import ProtocolTypeRouter, URLRouter
      from channels.auth import AuthMiddlewareStack
      import your_app.routing  # 替换为你的实际路由模块
      
      os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings')
      
      application = ProtocolTypeRouter({
          "http": get_asgi_application(),
          "websocket": AuthMiddlewareStack(
              URLRouter(
                  your_app.routing.websocket_urlpatterns
              )
          ),
      })
      
    2. 在Azure App Service的配置 -> 常规设置中,将启动命令设置为:
      daphne your_project.asgi:application --port 8000 --bind 0.0.0.0
      
      (替换your_project为实际项目名称)
  • 修正Redis Channel Layer的SSL配置
    Azure Redis缓存默认强制要求SSL连接,你的当前配置使用非SSL的redis://协议和6379端口,会导致连接失败:
    修改CHANNEL_LAYERS配置为:

    CHANNEL_LAYERS = {
        'default': {
            'BACKEND': 'channels_redis.core.RedisChannelLayer',
            'CONFIG': {
                'hosts': [('rediss://:{password}@{hostname}:6380'.format(
                    password=myPassword,
                    hostname=myHostname,
                ))],
                # 可选:添加超时配置避免连接超时
                'socket_connect_timeout': 30,
                'socket_timeout': 30,
            },
        },
    }
    

    注意:使用rediss://协议,端口改为Azure Redis的SSL专用端口6380(非SSL端口6379在Azure中默认关闭)。

  • 验证前端WebSocket连接地址
    前端必须使用wss://<你的App Service域名>/<ws路径>格式,示例:

    const socket = new WebSocket('wss://yourapp.azurewebsites.net/ws/chat/');
    

    禁止使用自定义端口(Azure仅开放80/443),所有WebSocket流量由App Service反向代理处理。

  • 排查Azure日志中的错误信息
    进入App Service -> 监控 -> 日志流,查看实时日志:

    • 检查是否有Redis连接失败的错误(如认证失败、SSL握手错误)
    • 确认ASGI服务器是否正常启动,是否存在路由匹配错误
    • 查看WebSocket握手阶段的HTTP错误码(如404、500)
  • 确认Azure Redis的防火墙规则
    进入Azure Redis缓存 -> 安全性 -> 防火墙和虚拟网络,确保已将App Service的出站IP地址加入允许列表,测试阶段可临时设置为“允许所有网络”以排除防火墙干扰。

内容的提问来源于stack exchange,提问作者Super MaxLv4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 12:27:27