解决nginx转发websocket报400错误

摘要:
它表示由于个人服务器上有多个项目,并且配置了辅助域名,因此需要转发辅助域名。转发工作中采用了众所周知的nginx。该错误在本地测试环境和访问非nginx转发时没有问题,因此推断该问题应该发生在nginx发送中。因此,在谷歌的帮助下,我们看到官方发布的socket.io对这个问题进行了讨论。链接是:https://github.com/socketio/socket.io/issues/1942解决方案在讨论区讨论。问题出在nginx的配置文件中。您需要修改nginx。conf文件。第二行和第三行告诉nginx在想要使用WebSocket时响应http升级请求。

说明

由于个人服务器上面有多个项目,配置了二级域名,需要对二级域名进行转发,在转发工作这快采取了大名鼎鼎的nginx。在这之前所有的项目运行转发都没问题,然而今天在部署一个具有websocket通信的项目时,却意外的报错了,错误消息如下:

1failed: Error during WebSocket handshake: Unexpected response code: 400

。这个错误在本地测试环境以及访问非nginx转发都没有问题,由此推断出问题应该出现在nginx转发这个环节。

于是,在google的帮助下,看到了socket.io 官方issues有关于这个问题的讨论,链接:https://github.com/socketio/socket.io/issues/1942

解决方案

看了下讨论区说的方案,问题出现在nginx的配置文件,需要修改nginx.conf文件。在linux终端中敲入vim /etc/nginx/nginx.conf,找到location这个位置,配置文件如下所示:

1server {
2        listen       80;
3        server_name  school.godotdotdot.com;
4        charset utf-8;
5
6        location / {
7            proxy_pass http://127.0.0.1:3000;
8            proxy_set_header Host $host;
9            proxy_http_version 1.1;
10            proxy_set_header Upgrade $http_upgrade;
11            proxy_set_header Connection "upgrade";
12            proxy_set_header X-Real-IP $remote_addr;
13            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
14            proxy_connect_timeout 60;
15            proxy_read_timeout 600;
16            proxy_send_timeout 600;
17        }
18
19        error_page   500 502 503 504  /50x.html;
20        location = /50x.html {
21            root   html;
22        }
23
24    }

其中最重要的是下面这三行

1proxy_http_version 1.1;
2proxy_set_header Upgrade $http_upgrade;
3proxy_set_header Connection "upgrade";

其中第一行是告诉nginx使用HTTP/1.1通信协议,这是websoket必须要使用的协议。

第二行和第三行告诉nginx,当它想要使用WebSocket时,响应http升级请求。

免责声明:文章转载自《解决nginx转发websocket报400错误》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Confluence 6 设置公共访问VS2015调用matlab Plot函数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用C++ 实现的 websocket 客户端 (基于easywsclient)

直接上代码 easywsclient.hpp #ifndef EASYWSCLIENT_HPP_20120819_MIOFVASDTNUASZDQPLFD #define EASYWSCLIENT_HPP_20120819_MIOFVASDTNUASZDQPLFD // This code comes from: // https://github.co...

部署基于.netcore5.0的ABP框架后台Api服务端,以及使用Nginx部署Vue+Element前端应用

前面介绍了很多关于ABP框架的后台Web API 服务端,以及基于Vue+Element前端应用,本篇针对两者的联合部署,以及对部署中遇到的问题进行处理。ABP框架的后端是基于.net core5.0 的Asp.net core 应用,因此和常规的Asp.net core 应用部署一样;而Vue+Element前端应用则是基于nodejs的应用,部署方式又...

[ PyQt入门教程 ] PyQt5基本控件使用:消息弹出、用户输入、文件/目录选择对话框

本文主要介绍PyQt界面实现中常用的消息弹出对话框、提供用户输入的输入框、打开文件获取文件/目录路径的文件对话框。学习这三种控件前,先想一下它们使用的主要场景: 1、消息弹出对话框。程序遇到问题需要退出需要弹出错误提示框 、程序执行可能造成的风险需要弹出警告窗口提示用户是否进一步执行等等。 2、用户输入框。比如常见的让用户选择执行的程序分支、yes/no等...

FastAPI WebSocket 基本使用一

FastAPI WebSocket 简单演示 下午没事看了看WebSocket,感觉这个挺好玩的,比写CRUD有意思。就复制了官网的demo演示看了看。 官方文档https://fastapi.tiangolo.com/advanced/websockets/ 效果 WebSocket 服务 使用Python FastAPI框架官网demo from t...

SpringBoot第二十篇:初识ActiveMQ

本文是作者之前写的关于 ActiveMQ 的一篇文章。此处为了保证该系列文章的完整性,故此处重新引入。 一、消息中间件的介绍 介绍 消息队列 是指利用 高效可靠 的 消息传递机制 进行与平台无关的 数据交流,并基于 数据通信 来进行分布式系统的集成。 特点(作用) 应用解耦 异步通信 流量削峰 (海量)日志处理 消息通讯 …... 应用场景 根据消息队...

Win10+Nginx+H5

1.首先下载Nginx   进入window的cmd窗口,输入如下图所示的命令,进入到nginx目录(D:/nginx-1.8.1),使用“start nginx.exe ”进行nginx的安装,如下图所示:    安装成功后,在“任务管理器”中会看到“nginx.exe”进程,如下图所示:    在浏览器地址栏输入:127.0.0.1,会看到如下图...