Django websocket失败,错误为';无效的帧头';
我创建了一个简单的聊天应用程序,并将其部署到AWS EC2 我用Vue.js构建了前端,并使用javascript的WebSocket 在后端,我使用了Django、channels和Postgres 它在本地运行正常,但在服务器上运行一段时间后,WebSocket断开连接 我使用Nginx进行部署 我还为Nginx WebSocket配置将proxy_read_timeout设置为600sDjango websocket失败,错误为';无效的帧头';,django,vue.js,nginx,websocket,django-channels,Django,Vue.js,Nginx,Websocket,Django Channels,我创建了一个简单的聊天应用程序,并将其部署到AWS EC2 我用Vue.js构建了前端,并使用javascript的WebSocket 在后端,我使用了Django、channels和Postgres 它在本地运行正常,但在服务器上运行一段时间后,WebSocket断开连接 我使用Nginx进行部署 我还为Nginx WebSocket配置将proxy_read_timeout设置为600s this.chatSocket = new WebSocket(GlobalConsta
this.chatSocket = new WebSocket(GlobalConstants.WEBSOCKET_URL + '/ws/chat/' + id + '/')
this.chatSocket.onmessage = (m) => {
let data = JSON.parse(m.data)
let messageData = {}
messageData[data.type] = data.message
let message = {
author: data.sender == this.currentUser ? 'me' : data.sender,
type: data.type,
data: messageData
}
this.receiveMessage(message)
if (data.sender != this.currentUser) {
this.addParticipant(data.sender)
}
}
server {
listen 80;
server_name x.x.x.x;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass "http://127.0.0.1:8000";
}
location /ws/ {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_read_timeout 600s;
}
}
这是nginx配置
this.chatSocket = new WebSocket(GlobalConstants.WEBSOCKET_URL + '/ws/chat/' + id + '/')
this.chatSocket.onmessage = (m) => {
let data = JSON.parse(m.data)
let messageData = {}
messageData[data.type] = data.message
let message = {
author: data.sender == this.currentUser ? 'me' : data.sender,
type: data.type,
data: messageData
}
this.receiveMessage(message)
if (data.sender != this.currentUser) {
this.addParticipant(data.sender)
}
}
server {
listen 80;
server_name x.x.x.x;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass "http://127.0.0.1:8000";
}
location /ws/ {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_read_timeout 600s;
}
}
建立连接后,它会工作10或20秒
然后这个错误就发生了
请帮助我。这是一个nginx配置问题。
我使用了nginx1.18.0,代理读取超时不起作用。443中没有websocket的特定配置。它正在侦听443并将请求重定向到80。因此,将重定向从等式中去掉,并将wss://更改为ws://。如果这样做有效,那么重定向就不被接受。但它在前10秒或前20秒有效。你试过了吗?此错误有两个原因:wss/ws不匹配和发送二进制数据。既然你说所有东西都在本地工作,并且错误显示连接失败,我假设是连接。老实说,我从来没有尝试过重定向WebSocket,从来没有看到它的好处,也从来没有从安全到不安全。同样地,它在部署后端的前10秒或20秒工作。然后出现这个错误。刷新后,它会再次工作10秒或20秒。