1

我制作了一个小 nginx conf 以将流量重定向到daphne服务器(用于服务器django)侦听的 unix 套接字。

根据文档

如果您对所有流量使用 Daphne,它会在 HTTP 和 WebSocket 之间自动协商,因此无需将 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;
       }
}
  • 如果我取消注释 location bloc 中的行,页面将显示为空白。

  • 如果我不这样做,页面会出现,但 websockets 似乎不起作用。

我怎么能解决这个问题?

开发服务器一切正常。

4

1 回答 1

2

我找到了一个解决方案:

我像这样实例化我的 websocket:

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;
       }
}

它工作得很好!

于 2016-09-27T03:08:27.837 回答