Django 频道 daphne 返回 200 状态码
Posted
技术标签:
【中文标题】Django 频道 daphne 返回 200 状态码【英文标题】:Django channels daphne returns 200 status code 【发布时间】:2020-01-21 14:23:42 【问题描述】:我已经使用 nginx + uwsgi 设置了一个 Django 应用程序。该应用程序还使用带有 redis 的 django-channels。在单个机器上部署设置时,一切正常。
但是,当我尝试在 2 个实例中设置应用程序并设置通用负载平衡器来协调请求时,请求会正确路由到 daphne 进程,并且我可以看到日志。但是 daphne 进程返回的状态码是 200 而不是 101。
负载均衡器 nginx 配置:
upstream webservers
server 10.1.1.2;
server 10.1.1.3;
server
location /
proxy_pass http://webservers;
使用的版本:
daphne==2.2.4
channels==2.1.6
channels-redis==2.3.2
所有路由工作正常,没有错误,只是返回的状态码是 200 而不是 101。
【问题讨论】:
那么你是用在http还是websocket上?消费者是否按预期工作? 我将它用于 websocket。这就是为什么我很惊讶我得到了 200 个状态码 您的消费者在工作吗? @Ken4scholars 是的,他们正在工作。当我在本地尝试或没有 nginx 负载均衡器时不会发生此问题 你是不是想多了? websocket 请求以 HTTP 请求和握手开始,之后启动协议更改。在第一个请求中获得 200 实际上可能是预期的行为。此外,正如您所说,您的消费者工作正常。你可能会被困在解决一个不存在的问题上 【参考方案1】:尝试添加以下标题,希望这会有所帮助:
server
location /
proxy_pass http://webservers;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
完整的official instruction关于如何设置Django Channels + Nginx can be found here
【讨论】:
是的,行得通。谢谢。我已将其添加到应用所在的 nginx 中,但未添加到负载均衡器中。 您是否可以在这里简要介绍一下升级的作用以及为什么它很重要?以上是关于Django 频道 daphne 返回 200 状态码的主要内容,如果未能解决你的问题,请参考以下文章
在 systemd 上使用 daphne 运行 django 频道
使用 Daphne 和 Nginx 部署 django 频道的问题
使用 SSL 使用 Daphne + NGINX 部署 Django 通道