nginx支持signalr

在部署在线客服系统时遇到SignalR连接404错误,原因是Nginx默认配置不支持WebSocket。解决方案是修改Nginx代理设置,启用http长连接支持WebSocket,同时为SignalR和webAPI接口设置不同的代理规则。最后通过调整Nginx配置文件,成功解决了SignalR的WebSocket问题,但导致webAPI接口请求失败。通过将两者代理分离,实现了SignalR和webAPI的正常工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题点:

最近在做一个在线客服系统,已经基本上完成了,所以想着部署到测试上进行测试一番,结果刚部署上去就碰到了“妖娥子”,打开地址,点击上线按钮,没有反应,F12监控看了一下,发现报错,错误信息如下:

SignalR地址直接报错404

然后看后端服务器报错信息,好像并没有发现什么错误,因为本地没有问题,所以就想到了服务器上nginx是不是拦截了,因为Nginx做代理的时候,默认配置不支持WebSocket。而Signalr本质就是WebSocket,所以问题点就找到了。

解决方案:

1.需要修改代理设置,需要改代理请求头的设置,增加如下几行代码

#启用http长连接支持websocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

2.属性含义:

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的,即连接请求完毕后就关闭。

查看更多参数配置>>>

3.最后重启Nginx,就可以发现 signalr 可以使用了, 但是细心的我又发现 webapi接口无法请求了,因次我们还是怀疑nignx配置问题,因为没有修改前webapi是可以得,

原因就在于我们刚刚配置了Nginx代理时使用长连接,但是我们webapi其他接口都是短连接的。所以我们要将signal的连接代理和webapi其他接口的代理分开。

如果SignalR和api业务服务器本来就是相互独立那么就不会存在这个情况。

4.最终的方案是这样的:

server {
    
  listen       80;
    
  server_name  signlar.51softwarebox.com;

    
  #webapi   代理
  location / {
        
    proxy_pass  http://127.0.0.1:8084;
        
    proxy_set_header Host $host;
        
    proxy_set_header X-Real-IP $remote_addr;
        
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    
  }
  #signalr 代理
  location /signalr {
        
    proxy_pass  http://127.0.0.1:8084;
        
    proxy_set_header Host $host;
        
    #启用http长连接支持websocket
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";    
  }

}

5.感谢您的阅读,最后附上项目连接: http://signlar.51softwarebox.com/home/chat2  ,欢迎各位老铁的关注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

用心_承载未来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值