代理重定向websockets和http到相同的(unix)套接字



我做了一个小小的nginx配置,将流量重定向到一个由daphne服务器侦听的unix套接字(django使用的服务器)

根据文档:

如果您对所有流量使用Daphne,它会在HTTP和HTTP之间自动协商WebSockets,所以没有必要有你的WebSockets在一个单独的端口或路径

所以我想代理websockets和Http流量到同一个unix套接字。

  1. 这可能吗?

  2. 我该怎么办?

以下是我目前所做的尝试:

upstream django_ws {
         server unix:///path/to/ws.sock;
}
server {
       listen 8082;
       server_name 127.0.0.1;
       charset utf-8;
       root /path/to/root;
       set $myroot $document_root;
       location / {
                proxy_pass http://django_ws;
                #proxy_http_version 1.1;
                #proxy_set_header Upgrade websocket;
                #proxy_set_header Connection upgrade;
       }
}
  • 如果我取消注释位置块中的行,页面显示空白

  • 如果我不这样做,页面出现,但websockets似乎不工作

我该如何解决这个问题?

开发服务器一切正常

我找到了一个解决方案:

我这样实例化我的websockets:

var socket = new WebSocket(ws_scheme + "://" + window.location.host
                           + "/ws" + window.location.pathname);

所以我可以把访问/ws的请求和访问/的请求分开。

所以我就这样做了:

upstream django_ws {
         server unix:///path/to/ws.sock;
}
server {
       listen 8082;
       server_name 127.0.0.1;
       charset utf-8;
       root /path/to/root;
       set $myroot $document_root;

       location /ws {
                proxy_pass http://django_ws;
                proxy_http_version 1.1;
                proxy_set_header Upgrade websocket;
                proxy_set_header Connection upgrade;
       }
       location / {
                proxy_pass http://django_ws;
       }
}

,它工作得很好!

相关内容

  • 没有找到相关文章

最新更新