Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django websocket失败,错误为';无效的帧头';_Django_Vue.js_Nginx_Websocket_Django Channels - Fatal编程技术网

Django websocket失败,错误为';无效的帧头';

Django 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

我创建了一个简单的聊天应用程序,并将其部署到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)
            }
        }
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秒。