我做了一个小小的nginx配置,将流量重定向到一个由daphne
服务器侦听的unix套接字(django
使用的服务器)
根据文档:
如果您对所有流量使用Daphne,它会在HTTP和HTTP之间自动协商WebSockets,所以没有必要有你的WebSockets在一个单独的端口或路径
所以我想代理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;
}
}
如果我取消注释位置块中的行,页面显示空白
如果我不这样做,页面出现,但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;
}
}
,它工作得很好!