我做了一个小小的nginx conf来将trafic重定向到由daphne
服务器(用于django
的服务器)监听的unix套接字。
如果您将Daphne用于所有流量,它会在HTTP和之间自动协商 WebSocket,因此不需要单独使用WebSocket 端口或路径
所以我想将websockets和Http trafic代理到同一个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;
}
}
如果我取消注释位置块中的行,页面将显示为空白。
如果不这样做,会显示页面,但网页框似乎不起作用。
我怎么解决这个问题?
开发服务器一切正常。
答案 0 :(得分:1)
我找到了解决方案:
我像这样设置我的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;
}
}
它运作得很好!