Nginx 实现对.NetCore3.1 Web应用和Signalr应用的反向代理

       最新实现了一套基于.netcore3.1的web应用,由于系统有实时通信的需求,所以Web项目内使用了Signarl技术,它是一种使用Websocket协议进行通信的技术(当然也可以采用其他协议)。

       为了保证稳定性,平台的部署考虑使用Centos Linux系统,并使用经典的Nginx作为反向代理,Web本地Url为http://localhost:5000,对于Web的反向代理比较简单,按如下配置即可:

server {
		listen 8001;

		location / {
			proxy_pass http://localhost:5000;
			proxy_http_version 1.1;
			proxy_set_header Upgrade $http_upgrade;
			proxy_set_header Connection keep-alive;
			proxy_set_header Host $host;
			proxy_cache_bypass $http_upgrade;
		}
	}	

       但是这样配置后,Signalr就无法使用Websocket协议建立连接,即便它会使用其他协议实现成功链接,但Websocket仍然是首选,无法连接的原因在于Nginx未配置Websoket的反向代理。查找了一些资料,其实Ngnix是完全支持Websocket的反向代理的。只要将配置文件改为如下方式就可以实现Websocket的反向代理了,此处所有 Signalr的Hub路径通过正则表达式表示。

server {
		listen 8001;

		location ~* /*(Hub)$ {
            proxy_pass http://localhost:5000;
            proxy_set_header Host $host:$server_port;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
			}

		location / {
			proxy_pass http://localhost:5000;
			proxy_http_version 1.1;
			proxy_set_header Upgrade $http_upgrade;
			proxy_set_header Connection keep-alive;
			proxy_set_header Host $host;
			proxy_cache_bypass $http_upgrade;
		}
	}	

 

你可能感兴趣的:(Signalr,web,nginx,nginx,websocket,linux)