解决nginx转发websocket报400错误
解决nginx转发websocket报400错误
说明
由于个人服务器上面有多个项目,配置了二级域名,需要对二级域名进行转发,在转发工作这快采取了大名鼎鼎的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升级请求。
基于MIT开源协议
本文链接:http://blog.godotdotdot.com/2017/12/04/解决nginx转发websocket报400错误/
解决nginx转发websocket报400错误的更多相关文章
- nginx转发成功报400 bad request,服务端未收到请求
nginx转发成功报400 bad request,服务端未收到请求 解决办法: upstream后面不要跟下划线 例如: upstream auth_service{ server 30.4.164 ...
- Nginx 反向代理报400错误解决方法!
如果后端真是的服务器设置有类似防盗链或者根据http请求头中的host字段来进行路由或判断功能的话,如果反向代理层的nginx不重写请求头中的host字段,将会导致请求失败,报400错误,解决办法: ...
- nginx 反向代理报400错误与Host关系
转载自:https://blog.csdn.net/qq_22208737/article/details/80787396 如果后端真是的服务器设置有类似防盗链或者根据http请求头中的host字段 ...
- websocket报400错误
解决方案看了下讨论区说的方案,问题出现在nginx的配置文件,需要修改nginx.conf文件.在linux终端中敲入vim /etc/nginx/nginx.conf,找到location这个位置, ...
- SpringMVC提交数据遭遇基础类型和日期类型报400错误解决方法
使用SpringMVC开发的时候,页面如果有日期格式的数据,后台接受也是java.util.Date,则报告400错误 .下面是解决方案的演示示例: 这个是实体类,里面createDate就是java ...
- IE浏览器报400错误:Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
前言: 在用IE浏览器时访问tomcat项目时,页面报400错误,后台错误: java.lang.IllegalArgumentException: Invalid character found i ...
- Yii2请求,报400错误
出现400错误是yii2.0的csrf防范策略导致 在components里面添加request配置如下: 'request' => [ // !!! insert a secret key i ...
- 访问本机的WEB API 报400错误
当时用的IP是127.0.0.1 报400错误,换成 localhost 后正常.
- Yii 1.1 请求报400错误
Yii的action可以带参数,比如: class PostController extends CController { public function actionCreate($categor ...
随机推荐
- gcc/g++多版本切换 (ubuntu18.04)
使用Ubuntu18.04已经有一段时间了,在使用过程中经常需要处理不同软件的编译工作,但是这时候就遇到这样一个问题,那就是不同软件,甚至是同一个软件的不同版本都会使用不同版本的gcc/g++来进行编 ...
- Android Hook框架adbi源码浅析(二)
二.libbase 其实上面加载完SO库后,hook的功能我们完全可以自己在动态库中实现.而adbi作者为了方便我们使用,编写了一个通用的hook框架工具即libbase库.libbase依然在解决两 ...
- Gym101002 2016NAIPC(队内第7次训练)
(由于先看的最后一题,然后又一直WA,导致这场有点爆炸,我背锅. A .Fancy Antiques 题意: 选择最多k个商店,买n个物品,每个物品分别对应两个店售卖,求最小花费是多少.n<10 ...
- CodeForces - 1101D:GCD Counting (树分治)
You are given a tree consisting of n vertices. A number is written on each vertex; the number on ver ...
- seo:与优化相关的熊掌号
可以做的有: 站点资源管理 天级收录(提交链接即可) 视频极速服务(暂只针对移动端体验优化)https://ziyuan.baidu.com/college/articleinfo?id=2411 原 ...
- (7)MySQL的事务
什么是事物: 作用:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节.事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像 ...
- 获奖感想和JAVA阶段性学习总结
一.获奖感想 事实上,这次能够获得小黄衫,实在是出乎我的意料.毕竟班级中还有不少比我优秀的人,但我不会妄自菲薄.我知道,这件小黄衫不仅仅是老师对我的奖励,更是对我的一种鞭策,一种激励.它要求我要在以后 ...
- 浅谈log4j-2
//配置日志输出的定义,主要有三点:1:输出什么级别的日志信息,2:将日志信息输出到那里,3:输出的日志以什么格式展示 public static void main(String[] args) { ...
- 【java编程】java中什么是bridge method(桥接方法)
https://blog.csdn.net/mhmyqn/article/details/47342577 https://www.cnblogs.com/strinkbug/p/5019453.ht ...
- 使用mongoose连接mongodb(转载文章)
mongodb数据库 MongoDB是一个高效的基于分布式文件存储的数据库,将数据存储为一个文档,数据结构由键值(key=>value)对组成.MongoDB 文档类似于 JSON 对象.字段值 ...