Nginx配置WebSocket反向代理
问题描述

目前项目中需要使用到WebSocket来进行通讯,所以就写了个Nginx反向代理WebSocket的配置文件.

很简单,但是很有效,能够横向扩展WebSocket服务端

先直接展示配置文件,如下(使用的话直接复制,然后改改ip和port即可)

map $http_upgrade $connection_upgrade { 
	default upgrade; 
	'' close; 
upstream wsbackend{ 
	server ip1:port1; 
	server ip2:port2; 
	keepalive 1000; 
server { 
	listen 20038; 
	location /{ 
		proxy_http_version 1.1; 
		proxy_pass http://wsbackend; 
		proxy_redirect off; 
		proxy_set_header Host $host; 
		proxy_set_header X-Real-IP $remote_addr; 
		proxy_read_timeout 3600s; 
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
		proxy_set_header Upgrade $http_upgrade; 
		proxy_set_header Connection $connection_upgrade; 
map $http_upgrade $connection_upgrade { 
	default upgrade; 
	'' close; 
1. 如果 $http_upgrade 不为 '' (空),则 $connection_upgrade 为 upgrade 
2. 如果 $http_upgrade 为 '' (空),则 $connection_upgrade 为 close
upstream wsbackend{ 
	server ip1:port1; 
	server ip2:port2; 
	keepalive 1000; 
表示的是 nginx负载均衡 
1. 两台服务器 (ip1:port1)和(ip2:port2) 
2. keepalive 1000 表示的是每个nginx进程中上游服务器保持的空闲连接,当空闲连接过多时,会关闭最少使用的空闲连接.当然,这不是限制连接总数的,可以想象成空闲连接池的大小.设置的值应该是上游服务器能够承受的
server { 
	listen 20038; 
	location /{ 
		proxy_http_version 1.1; 
		proxy_pass http://wsbackend; 
		proxy_redirect off; 
		proxy_set_header Host $host; 
		proxy_set_header X-Real-IP $remote_addr; 
		proxy_read_timeout 3600s; 
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
		proxy_set_header Upgrade $http_upgrade; 
		proxy_set_header Connection $connection_upgrade; 
表示的是监听的服务器的配置 
1. listen 20038 表示 nginx 监听的端口 
2. locations / 表示监听的路径(/表示所有路径,通用匹配,相当于default) 
3. proxt_http_version 1.1 表示反向代理发送的HTTP协议的版本是1.1,HTTP1.1支持长连接 
4. proxy_pass http://wsbackend; 表示反向代理的uri,这里可以使用负载均衡变量 
5. proxy_redirect off; 表示不要替换路径,其实这里如果是/则有没有都没关系,因为default也是将路径替换到proxy_pass的后边 
6. proxy_set_header Host $host; 表示传递时请求头不变, $host是nginx内置变量,表示的是当前的请求头,proxy_set_header表示设置请求头 
7. proxy_set_header X-Real-IP $remote_addr; 表示传递时来源的ip还是现在的客户端的ip 
8. proxy_read_timeout 3600s; 表的两次请求之间的间隔超过 3600s 后才关闭这个连接,默认的60s.自动关闭的元凶 
9. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 表示X-Forwarded-For头不发生改变 
10. proxy_set_header Upgrade $http_upgrade; 表示设置Upgrade不变 11. proxy_set_header Connection $connection_upgrade; 表示如果 $http_upgrade为upgrade,则请求为upgrade(websocket),如果不是,就关闭连接
Nginx配置WebSocket反向代理问题描述目前项目中需要使用到WebSocket来进行通讯,所以就写了个Nginx反向代理WebSocket的配置文件.很简单,但是很有效,能够横向扩展WebSocket服务端先直接展示配置文件,如下(使用的话直接复制,然后改改ip和port即可)map $http_upgrade $connection_upgrade { defau...
最近在做项目的时候用到了webSocket协议,而且是在微信小程序中用到了webSocket,微信小程序中使用wss协议的时候不能设置端口,只能使用默认的443端口。我擦,我的https已经监听了443端口,webSocket再去监听443,肯定不行啊。要想办法解决,老大把这个问题交给我了,我愉快(手动懵逼)的接收了这个任务。想到了两种办法解决。一种解决办法是把webSocket部署到另一台服务器上,这样成本也太高了。另一种办法,就是使用nginx反向代理。 因为webSocket协议是基于http协议升级的(见下图),所以可以使用nginx反向代理webSocket. webSocket proxy_pass http://127.0.0.1:8080/; // 代理转发地址     proxy_http_version 1.1; proxy_read_timeout 3600s; // 超时设置 // 启用支持websocket连接 proxy_set_header Upgrade $http_upgrade; proxy_set_head
Wss Https 配置 当域名是https 时必须使用wss 来连接,wss://域名/nginx 匹配规则/后端endpoint/参数 map $http_upgrade $connection_upgrade { default upgrade; '' close; upstream websocket { server 127.0.0.1:8080; keepalive 1024; server { listen 443 ssl;
一、对wss与nginx代理wss的理解: 1、wss协议实际是websocket+SSL,就是在websocket协议上加入SSL层,类似https(http+SSL)。 2、利用nginx代理wss【通讯原理及流程】 (1)、客户端发起wss连接连到nginx (2)、nginx将wss协议的数据转换成ws协议数据并转发到Workerman的websocket协议端口 (3)、W...
springboot项目中集成了websocket之后,本地测试正常,但是部署到服务器之后,容易遇到的几个问题。 本文指的服务器环境 为Linux+Nginx 其他环境可能不适用 问题一、pom文件的依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocke
主要是在Websocket 跨域的问题上。 今天在本地用golang的官方包写了一个简单的websocket server,写完后通过浏览器执行js的方式测试OK,然后打算把flutter也接上。 可是在flutter上通过 WebSocket.connect的时候,一直提示错误。 WebSocketEx...
配置nginx实现WebSocket的负载均衡,可以按照以下步骤进行: 1. 确保已经安装了支持WebSocketnginx版本。可以通过运行“nginx -V”命令来检查是否启用了WebSocket模块。 2. 配置upstream,指定多个WebSocket后端服务器。例如: upstream websocket_backend { server backend1.example.com:8080; server backend2.example.com:8080; 3. 在server段中添加WebSocket代理配置,使用proxy_pass指令将请求转发到upstream。例如: server { listen 80; server_name example.com; location /ws/ { proxy_pass http://websocket_backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; 其中,`location /ws/`表示WebSocket请求的路径。`proxy_pass`将请求转发到指定的upstream,`proxy_http_version`设置代理协议版本,`proxy_set_header Upgrade $http_upgrade`和`proxy_set_header Connection "upgrade"`用于将请求升级到WebSocket协议。 4. 重启nginx服务器,使配置生效。 完成上述步骤后,nginx将会将WebSocket请求分配到多个后端服务器上,实现WebSocket的负载均衡。