Django Channels是否使用ws://协议前缀在Django视图或Channels应用程序之间路由?

时间:2019-01-16 10:57:40

标签: django nginx django-channels daphne

我正在使用Daphne运行Django + Channels服务器。 Daphne服务器位于Nginx后面。我的Nginx配置看起来像最后一样。

当我尝试连接到 var newWin = window.open(url, '_blank'); newWin.addEventListener('focus', function() { var refreshBtnList = newWin.document.getElementsByClassName('refresh-table-data'); for (var idx=0; idx < refreshBtnList.length; idx++) { refreshBtnList[idx].click(); // Here I'm getting span element properly but click is not getting trigger by this code } }); 时遇到ws://example.com/ws/endpoint错误。

对我来说,Daphne似乎正在使用协议路由到Django视图或Channels应用。如果看到NOT FOUNT /ws/endpoint,则路由到Django视图;看到http,则路由到Channels应用。

使用以下Nginx代理传递配置,URL始终具有ws协议前缀。所以我在日志中得到404或找不到。如果我将proxy_pass前缀更改为http,Nginx配置将失败。

在这种情况下,设置频道的理想方法是什么?

ws

1 个答案:

答案 0 :(得分:0)

是的,例如在问题中,通道会根据协议标头wshttp/https来检测路由

无法在ws中使用proxy_pass http://0.0.0.0:8000/;前缀。要转发协议信息,应包含以下配置。

proxy_set_header X-Forwarded-Proto $scheme;

这会将架构/协议(ws)信息转发到Channels应用。并根据此信息引导路线。