首页 > 解决方案 > websocket因“无效的帧头”而失败

问题描述

我创建了一个简单的聊天应用程序并将其部署到 AWS EC2。

我用 Vue.js 构建了前端并使用了 javascript 的 WebSocket。

在后端,我使用了 Django、channels 和 Postgres。

它在本地工作正常,但 WebSocket 在服务器上一段时间后断开连接。

我使用 Nginx 进行部署。

我还将 Nginx WebSocket 配置的 proxy_read_timeout 设置为 600s。

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

这是 nginx 配置。

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 秒。

然后发生此错误。

请帮我。

标签: djangovue.jsnginxwebsocketdjango-channels

解决方案


这是一个nginx配置问题。我使用了 nginx 1.18.0 并且 proxy_read_timeout 没有工作。


推荐阅读