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啊,我这里是火狐 ...
随机推荐
- 5、struct2的获得jsp参数的第三种方式
在前面已经讲解了通过在action中直接通过jsp的参数和ModelDiver的方式获得浏览器传递的参数,下面我们介绍第三种方式,也是在项目开发中推荐的方式 action不需要在实现ModelDriv ...
- 蒲公英 · JELLY技术周刊 Vol.12 尤雨溪新作 Vite, 你会支持么?
「蒲公英」期刊,每周更新,我们专注于挖掘「基础技术.工程化.跨端框架技术.图形编程.服务端开发.桌面开发.人工智能」等多个大方向的业界热点,并加以专业的解读:不仅如此,我们还精选凹凸技术文章,向大家呈 ...
- SQL注入之Union注入攻击
union联合查询算是最简单的一种注入了,但是却是经常遇到. 什么是UNION注入 UNION操作符用于合并两个或多个SELECT语句的结果集,而且UNION内部的SELECT语句必须拥有相同数量的列 ...
- vs code 初始化vue项目框架
1.首先安装npm组件 下载地址:https://nodejs.org/en/ 安装完 2.配置环境变量 3.验证是否成功 node -v npm -v 4.替换npm 输入npm install ...
- SpringBoot--使用Mybatis分页插件
1.导入分页插件包和jpa包 <dependency> <groupId>org.springframework.boot</groupId> <artifa ...
- CentOS7下普通账号通过systemctl管理服务需要输入root密码问题
问题描述: 使用普通账号test通过systemctl启动系统服务提示需要输入root密码: 解决方案: 根据上面提示得知权限由polkit进行管理,对应的是org.freedesktop.syste ...
- 使用MWeb进行博客发布测试
MWeb 是专业的 Markdown 写作.记笔记.静态博客生成软件,目前已支持 Mac,iPad 和 iPhone.MWeb 有以下特色: 软件本身: 使用原生的 macOS 技术打造,追求与系统的 ...
- CSS3样式_实现字体发光效果
text-shadow 属性仅仅是用来设置文本阴影的,似乎并不能实现字体发光效果.其实不然,这正是 text-shadow 属性的精妙之处.当阴影的水平偏移量和垂直偏移量都为0时,阴影就和文本重合了. ...
- Python语法的使用和简介
前言 Python的语法和其它编程语言的语法有所不同,编写Paython程序之前需要对语法有所了解,才能编写规范的Python程序. 输入输出 print() # 打印显示input() # 输入内容 ...
- Django项目后台不挂断运行
Django项目后台不挂断运行 方法一: 1.进入项目目录下,运行下面程序: nohup python manage.py runserver 0.0.0.0:5008 & nohup(no ...