Nginx之——配置WebSocket

转载于:https://blog.csdn.net/l1028386804/article/details/86649543

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),如果不是,就关闭连接

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 反向代理是一种常见的服务器配置方式,它允许服务器将请求转发给不同的服务器进行处理。而Websocket是一种用于实现客户端与服务器之间实时通信的协议。在Nginx配置反向代理Websocket,可以实现将Websocket请求转发给后端服务器进行处理。 下面是一个反向代理Websocket配置实例: 1. 首先,在Nginx配置文件中添加一个代理服务器的配置块。可以在Nginx的主配置文件(通常是/etc/nginx/nginx.conf)中的http块内添加如下代码块: ``` server { listen 80; server_name your-domain.com; location / { proxy_pass http://backend-server; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } ``` 2. 在上述代码中,我们定义了一个简单的HTTP服务器,并将请求转发给名为`backend-server`的后端服务器。你可以根据实际情况替换为后端服务器的IP地址或域名。 3. `proxy_http_version 1.1;`这一行代码用于指定使用HTTP/1.1协议进行通信。而`proxy_set_header Upgrade $http_upgrade;`和`proxy_set_header Connection "upgrade";`这两行代码则用于设置HTTP头部,以便在进行Websocket协议升级时,能够正确处理升级请求。 4. 最后,保存配置文件,并重新加载Nginx配置,使其生效。可以使用命令`sudo nginx -t`来检查配置文件是否正确,然后使用`sudo service nginx reload`重新加载Nginx配置。 通过上述配置,当客户端请求Websocket连接时,Nginx会将其转发给后端服务器进行处理。这样,我们就可以实现在Nginx配置反向代理Websocket的功能。 ### 回答2: 反向代理websocket配置实例在nginx中可以通过使用proxy_pass和proxy_http_version指令来实现。 首先,我们需要在nginx配置文件中打开http和http_realip_module模块: ``` http { ... include mime.types; default_type application/octet-stream; ... real_ip_header X-Forwarded-For; set_real_ip_from 0.0.0.0/0; } ``` 然后,我们需要配置一个server来处理WebSocket的请求: ``` server { listen 80; server_name example.com; location /ws { proxy_pass http://backend_server; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } ``` 在上面的配置中,我们通过proxy_pass将请求代理到后端服务器。需要将backend_server替换为实际的后端服务器地址。 通过设置proxy_http_version为1.1,我们确保nginx能够正确处理WebSocket请求。 然后,通过设置proxy_set_header Upgrade $http_upgrade和proxy_set_header Connection "upgrade",我们告诉nginx将请求升级为WebSocket连接。 最后,保存并重新加载nginx配置文件,使配置生效。 通过以上配置nginx将会将所有发送到http://example.com/ws的WebSocket请求转发到后端服务器,并确保WebSocket连接能够正确建立。 这样,我们就完成了nginx反向代理WebSocket配置实例。 ### 回答3: 反向代理可以使得Nginx能够处理WebSocket的流量,并将其转发到实际处理请求的后端服务器。下面是一个反向代理WebSocket配置实例: 1. 在Nginx配置文件中,找到http块,并添加以下配置: ``` map $http_upgrade $connection_upgrade { default upgrade; '' close; } upstream backend { server 127.0.0.1:8080; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } } ``` 在该配置中,我们创建了一个名为`backend`的后端服务器组,其中该组只有一个服务器`127.0.0.1:8080`。`backend`可以根据实际情况进行修改。 2. 在`location /`块中,我们使用`proxy_pass`指令将所有流量转发到`backend`后端服务器组。为了支持WebSocket,我们还需要设置升级HTTP协议的相关HTTP头字段。`proxy_http_version`指令设置使用HTTP/1.1协议,`proxy_set_header`指令设置`Upgrade`和`Connection`这两个HTTP头字段的值,用来启用和维持WebSocket连接。 3. 保存并退出配置文件,然后重新加载Nginx配置: ``` sudo systemctl reload nginx ``` 上述配置实例会将所有流量转发到`backend`后端服务器组,包括WebSocket请求。这样,Nginx就能支持WebSocket反向代理的处理了。你可以根据实际需求进行相关配置调整,比如更改监听端口、设置SSL证书等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值