代理将 websockets 和 http 重定向到同一个(unix)套接字
Proxy redirecting websockets and http to the same (unix) socket
我制作了一些 nginx conf 以将流量重定向到由 daphne
服务器(用于 django
的服务器)侦听的 unix 套接字。
根据 documentation :
If you use Daphne for all traffic, it auto-negotiates between HTTP and
WebSocket, so there’s no need to have your WebSockets on a separate
port or path
所以我想将 websockets 和 Http 流量代理到同一个 unix 套接字。
可以吗
我该怎么办?
这是我迄今为止尝试过的方法:
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;
}
}
如果我取消注释位置块中的行,页面将显示为空白。
如果我不这样做,页面会出现但 websocket 似乎不起作用。
我该如何解决这个问题?
开发服务器一切正常。
我找到了解决方案:
我像这样实例化我的 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;
}
}
而且效果很好!
我制作了一些 nginx conf 以将流量重定向到由 daphne
服务器(用于 django
的服务器)侦听的 unix 套接字。
根据 documentation :
If you use Daphne for all traffic, it auto-negotiates between HTTP and WebSocket, so there’s no need to have your WebSockets on a separate port or path
所以我想将 websockets 和 Http 流量代理到同一个 unix 套接字。
可以吗
我该怎么办?
这是我迄今为止尝试过的方法:
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;
}
}
如果我取消注释位置块中的行,页面将显示为空白。
如果我不这样做,页面会出现但 websocket 似乎不起作用。
我该如何解决这个问题?
开发服务器一切正常。
我找到了解决方案:
我像这样实例化我的 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;
}
}
而且效果很好!