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. 确保已经安装了支持WebSocket的nginx版本。可以通过运行“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的负载均衡。