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

Django Channels-Redis UnixSocket配置下WebSocket连接失败求助

修复Django Channels + Redis Unix Socket的WebSocket连接失败问题

1. 修正CHANNEL_LAYERS的Redis配置(最核心问题)

你的settings.py中Redis连接格式错误——Unix Socket不需要指定端口,且密码传递方式不符合channels-redis的要求,以下是两种正确配置方式:

方式一:带参数的Unix Socket URL格式

ASGI_APPLICATION = 'public_python.asgi.application'

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            "hosts": ["unix:///home/Login/domains/domain.pl/redis.sock?password=my_pass"],
        },
    },
}

方式二:字典格式(更清晰易读)

ASGI_APPLICATION = 'public_python.asgi.application'

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            "hosts": [
                {
                    "unix_socket_path": "/home/Login/domains/domain.pl/redis.sock",
                    "password": "my_pass",
                }
            ],
        },
    },
}

2. 必须使用ASGI兼容的服务器启动

禁止使用python manage.py runserver,它不支持生产/正式环境的WebSocket连接,需用Daphne或Uvicorn启动:

用Daphne启动

daphne -b 0.0.0.0 -p 8000 public_python.asgi:application

用Uvicorn启动

uvicorn public_python.asgi:application --host 0.0.0.0 --port 8000

3. 检查Redis Unix Socket的权限

运行ASGI服务器的用户必须能读写Redis Socket文件:

  1. 查看Socket文件权限:
ls -l /home/Login/domains/domain.pl/redis.sock
  1. 修改redis.conf中的权限配置:
unixsocketperm 770
  1. 重启Redis服务,并将ASGI运行用户(如www-data或你的登录用户)加入Redis所属组:
usermod -aG redis www-data

4. 验证Redis基础连接是否正常

用redis-cli直接测试Socket连接,排除Redis自身配置问题:

redis-cli -s /home/Login/domains/domain.pl/redis.sock -a my_pass

如果能进入Redis命令行,说明Redis的密码、Socket路径都没问题;若失败,优先检查密码是否匹配、Redis服务是否运行。

5. 反向代理(如Nginx)的WebSocket配置优化

如果用Nginx做反向代理,必须添加WebSocket握手的头信息转发规则:

location /ws/ {
    proxy_pass http://127.0.0.1:8000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

配置完成后重启Nginx。

6. 查看日志定位细节错误

如果以上步骤都无效,通过日志找具体原因:

  • 查看Django应用日志,确认是否有Redis连接失败的报错
  • 查看ASGI服务器(Daphne/Uvicorn)的控制台输出,检查WebSocket握手阶段的错误
  • 查看Redis服务日志,排查认证失败、连接拒绝等记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 10:34:55