Nginx 服务器配置支持SignalR (WebSocket)
今天SignalR部署在测试环境服务器前端出现无法连接,前端报错如下:
failed: Error during WebSocket handshake: Unexpected response code: 200
Failed to start the transport 'WebSockets': null

SignalR地址直接报错404
然后查看服务器端是否有什么问题,服务器端也有报错如下
Microsoft.AspNetCore.SignalR.HubConnectionContext - Failed connection handshake.

看前端报错看像是WebSocket问题,因为SignalR本质还是通过WebSocket来实现通信的,根据错误像是服务器不支持WebSocket,我们是使用的Nginx做代理的时候默认配置不支持WebSocket。需要修改代理设置,需要改代理请求头的设置。
主要修改如下,在location节点下面新增。

文末有完整的nginx配置实例可复制。
proxy_http_version 1.1
指定使用http版本,因为只有http1.1才支持长连接。
proxy_set_header Upgrade $http_upgrade
将客户端http请求头Upgrade 透传过来
roxy_set_header Connection “upgrade”
upgrade意思是告诉服务器使用最高版本协议进行通信。
默认roxy_set_header Connection这里如果不写的话,在htt1.0中Connection 默认是close的,即连接请求完毕后就关闭。
以上归根到底都是基于http头进行设置修改,如果我们自己本身对http头有更多了解,还是有很大帮助的。
按照这个修改,然后重启Nginx。nginx –s reload。
再看前端signal发现连接成功

但是这个时候其他webapi接口无法请求了,swagger可以打开但是接口无法请求了报400
这个时候也想到了应该是Nginx问题,毕竟再没有修改Nginx的时候其他接口是可以使用的。当然如果SignalR和api业务服务器本来就是相互独立那么就不会存在这个情况,我的SignalR和业务服务接口都是在一起的。
原因就在于我们刚刚配置了Nginx代理时使用长连接,但是我们webapi其他接口都是短连接的。所以我们要将signal的连接代理和webapi其他接口的代理分开。
最后的设置如下

location 就是Nginx的路由匹配,这样添加后当我们请求url域名后面是SignalR则使用长连接进行代理转发了。location通常我们还回用于静态文件的代理,这样静态文件直接通过nginx就能返回到前端了。不需要请求到后端服务器。
本次完整的nginx配置如下
server{
listen 80;
listen 443 ssl;
#域名
server_name t-aabb.com;
#https配置证书和ssl
ssl_certificate cert/_.aabb.com.crt;
ssl_certificate_key cert/_.aabb.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
client_max_body_size 100m;
#后端服务代理
location / {
proxy_pass http://192.168.0.28:8080;
proxy_set_header Host $http_host;
}
#Signal代理
location /SignalR {
proxy_pass http://192.168.0.28:8080;
#启用http长连接支持websocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Nginx 服务器配置支持SignalR (WebSocket)的更多相关文章
- tomcat 7下spring 4.x mvc集成websocket以及sockjs完全参考指南(含nginx/https支持)
之所以sockjs会存在,说得不好听点,就是因为微软是个流氓,现在使用windows 7的系统仍然有近半,而windows 7默认自带的是ie 8,有些会自动更新到ie 9,但是大部分非IT用户其实都 ...
- 【Nginx】面试官问我Nginx能不能配置WebSocket?我给他现场演示了一番!!
写在前面 当今互联网领域,不管是APP还是H5,不管是微信端还是小程序,只要是一款像样点的产品,为了增加用户的交互感和用户粘度,多多少少都会涉及到聊天功能.而对于Web端与H5来说,实现聊天最简单的就 ...
- 烂泥:nginx同时支持asp.net与php
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 经过两天的实验,终于让nginx同时支持asp.net与php了.下面就把具体的配置过程记录如下. 注意:本次实验OS:centos6 64bit. 尽 ...
- nginx完美支持yii2框架
nginx完美支持yii2框架 server {listen 80;server_name www.peita.net peita.net;# default_server;access_log /d ...
- nginx完美支持tp框架
nginx完美支持tp框架 server { listen 80; server_name mit.520m.com.cn; access_log /data/wwwlogs/mit.520m.com ...
- codeigniter在nginx 下支持pathinfo和去除index.php的方法
as今天准备把网站搬迁到nginx上发现codeigniter框架在nginx上不能使用,后来发现是nginx不支持pathinfo,下面介绍怎么在nginx下开启pathinfo 开始pathinf ...
- nginx服务器配置多域名
nginx服务器支持配置多站点,我们可以通过配置子域名让你的一个域名下放置多个项目. 那么如何实现这个过程呢? 网络上的许多方案,有些写的过于繁杂,有些则是配置有误,或者说,有些配置项是要根据自己的主 ...
- 安装nginx+ngx_lua支持WAF防护功能
安装nginx+ngx_lua支持WAF防护功能 nginx lua模块淘宝开发的nginx第三方模块,它能将lua语言嵌入到nginx配置中,从而使用lua就极大增强了nginx的能力.nginx以 ...
- nginx配置支持http2
1.简介 nginx 配置支持http2.目前大多数网站都是http1.1(如果你没有特别配置过的话) 一切都是为了访问更快. 2.如何查看自己网站的http版本 最简单的方法就F12啊,我这里是火狐 ...
随机推荐
- idea 2018版/2019版的破解
idea 2019版破解的穿越隧道:https://www.jianshu.com/p/09c9afae9a05 idea 2018版破解的穿越隧道:https://www.jianshu.com/p ...
- java scoket Blocking 阻塞IO socket通信二
在上面一节中,服务端收到客户端的连接之后,都是new一个新的线程来处理客户端发送的请求,每次new 一个线程比较耗费系统资源,如果100万个客户端,我们就要创建100万个线程,相当的 耗费系统的资源, ...
- python 异常类型大全
try except 处理异常真舒服!!!
- ajax前后端交互原理(3)
3.HTTP服务器 3.3.相关前置知识 1 什么是url? 统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址.互联网上的每个文件都有一个唯一的UR ...
- Python数据分析帮你清晰的了解整理员工们的工作效率和整体满意度
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 项目背景 2018年,被称为互联网的寒冬之年.无论大小公司,纷纷走上了裁员 ...
- 怎样用 I/O流读取txt文件?
java.io包提供了用来永久保存对象状态的机制,可处理各种类型的流,如文件流.字节流.字符流等,还提供实现可串行化Serializable接口.可处理对象流. Java语言提供3种自动生成的标准流. ...
- Nginx配置upstream并且实现负载均衡
感谢看过这一些列博文和评论的小伙伴, 我把自己所看到的学到的拿到这里来分享是想和大家一起学习进步, 想听听园友给出的意见, 也是对自己学习过程的一个总结. 技术无止境, 我们仍需努力! 1,话不多说, ...
- List<List<Object>> list = new ArrayList<List<Object>>(); 求回答补充问题 list.get(position).add(Object);为什么会报错啊我想在对应的list里面添加对象
public static void main(String[] args){ List<List<Object>> list = new ArrayList<List& ...
- 【Xamarin.Forms 1】App的创建与运行
引言 本篇文章将从介绍Xamarin.Forms创建开始. 开发环境 Visual Studio 2019 16.6.2 Xamarin.Forms 4.6.0.726 Android 5.0 (AP ...
- 吐血推荐,想进BAT必看
不必太纠结于当下,也不必太忧虑未来,人生没有无用的经历,当你经历过一些事情后,眼前的风景已经和从前不一样了.--村上春树 一.包含如下内容 ActiveMQ消息中间件面试专题 BAT80道面试题 BA ...