当前位置: 首页 > article >正文

Nginx+Tomcat负载均衡、反向代理

目录

一、代理

1.概述

二、Nginx反向代理

1.七层反向代理 - 动静分离

2.四层反向代理 - 负载均衡

三、Nginx负载均衡调度策略


一、代理

1.概述

代理:
指服务端和客户端之间架设的一层服务器。代理负责接受客户端的请求并将它转发给服务端,然后再将服务端返回的响应转发给客户端。

代理又分为正向代理和反向代理。

正向代理:
为客户端服务的,客户端可以根据正向代理访问到它本身无法访问到的服务器资源。

反向代理:
为服务端服务的,反向代理可以帮助服务器接收来自客户端的请求,帮助服务器做请求转发,负载均衡等。

二、Nginx反向代理

1.七层反向代理 - 动静分离

七层反向代理:
基于http、https等七层应用协议的代理转发,可以根据用户的请求访问的URL路径来转发请求,通常用于动静分离等应用场景。

Nginx动静分离:
通过location匹配用户的访问路径来判断是动静态资源请求还是动态资源请求。静态资源请求就由Nginx自行处理并相应,动态资源请求则通过反向代理转发请求给后端应用服务器处理了。

配置:

1)在 http 配置块中使用 upstream 定义后端应用服务器池的名称和各个节点的参数
http {
    upstream 服务器池名称 {
        server IP1:PORT1 weight=1;
        server IP2:PORT2 weight=1;
        [调度策略;]
    }

2)在 server 配置块中使用 location 匹配用户请求的动态资源的URL路径,在 location 配置块里使用 proxy_pass 基于协议配置转发
    server {
	    listen 
        server_name
        .....
        location ~ .*\.jsp$ {
		    proxy_pass http://服务器池名称;
			 
            #还可以添加一些转发参数,用于为后端服务器获取真实的客户端地址
            proxy_set_header HOST $host;		
            proxy_set_header X_Real_IP $remote_addr;		
            proxy_set_header X_Forwarded_For $proxy_add_x_forwarded_for;		
		}		
    }

}

2.四层反向代理 - 负载均衡

四层反向代理:
基于IP端口实现的代理转发,可以根据用户请求的IP或端口来转发请求,通常用于做网络接入层的负载均衡器等应用场景。

Nginx负载均衡:
通过反向代理实现的,可以将Nginx反向代理服务器接收到的请求根据调度策略转发给多个后端应用服务器处理。

配置:

1)编译安装nginx时需要添加 stream 四层代理模块  ./configure --with-stream

2)在 http 配置块上面同层级添加 stream 配置块,在 stream 配置块里添加 upstream 配置块,使用 upstream 定义后端应用服务器池的名称和各个节点的参数
stream {
    upstream 服务器池名称 {
	    server IP1:PORT1 weight=1;
        server IP2:PORT2 weight=1;
        [调度策略;]
	}
	
3)在 stream 配置块里添加 server 配置块,在 server 配置块里使用 listen 定义监听地址和端口,使用 proxy_pass 配置转发
    server {
	    listen  IP:PORT;
        proxy_pass 服务器池名称;
	}
}

http {....}

三、Nginx负载均衡调度策略

  • 轮询:是nginx默认调度策略,按照时间顺序逐一分配请求
  • 加权轮询:使用weight参数设置权重,权重值越高的后端节点被分配请求的概率越大
  • least_conn(最少连接):优先将请求分配给当前连接数最少的后端节点
  • ip_hash:根据客户端IP做hash缓存调度,会将来自同一个IP的请求都分配给固定的一个后端节点
  • url_hash:根据客户端请求的URL路径做hash缓存调度,会将相同的URL路径的请求都分配给固定的一个后端节点。需要第三方插件模块支持
  • fair:优先将请求给给响应时间最少的后端节点。需要第三方插件模块支持
  • random:随机分配请求
  • hash $remote_addr consistent:一致性hash算法,根据nginx全局变量的值来做hash缓存调度

配置举例:

upstream 服务器池名称 {
    server IP1:PORT1   weight=权重  max_fails=最大的失败次数  fail_timeout=暂时服务的时间;
	.....
	least_conn;/ip_hash;/fair;/hash $request_uri;/random;
}

Nginx负载均衡如何实现会话保持

  1. ip_hash、url_hash、hash $remote_addr consistent
    基于客户端IP或请求的URL路径将请求发送到同一个后端节点服务器来实现会话保持,但是此法容易出现负载失衡问题
  2. sticky_cookie_insert                
    基于cookie判断实现会话保持
    upstream backend {
        server IP1:PORT1;
        server IP2:PORT2;
        sticky_cookie_insert  srv_id   expires=浏览器中保持cookie的时间    domain=cookie的域名    path=cookie的路径;
    }
    
  3. 通过后端应用服务器自身机制,配合使用缓存数据库(redis、memcached等)为后端节点服务器做session同步复制实现会话保持
     

http://www.kler.cn/news/323236.html

相关文章:

  • C语言编程-经典易错题1
  • 若依开源系统多数据源整合clickhouse数据库详细步骤
  • C++远端开发环境安装(centos7)
  • 【网络安全安全管理入门必知必会】应急响应之服务器入侵排查,零基础入门到精通,收藏这篇就够了
  • 游戏厅计时器ps5计算时间的软件 佳易王电玩计时计费管理系统操作教程
  • 【有啥问啥】深度理解主动学习:机器学习的高效策略
  • 927解决WSL2上UBuntuz终端卡顿
  • Vue中集中常见的布局方式
  • 赋值运算符重载
  • python 实现harmonic series调和级数算法
  • 现代LLM基本技术整理
  • Android13高通平台拨打/接听只有免提模式,无听筒模式
  • unsqueeze函数、isinstance函数、_VF模块、squeeze函数
  • 爆火!大模型算法岗 100 道面试题全解析,赶紧收藏!
  • STM32CUBEIDE FreeRTOS操作教程(五):mutex互斥信号量
  • Python中的null是什么?
  • 基于SpringBoot+Vue的小儿推拿培训管理系统
  • MySQL按照经纬度排序 查询出商家信息
  • Cisco ASA 9.22.1 发布下载,新增功能概览
  • Mysql—主从复制的slave添加及延迟回放
  • 2024年7月大众点评乌鲁木齐美食店铺基础信息
  • 物理学基础精解【26】
  • .NET MAUI(.NET Multi-platform App UI)上下文菜单
  • 【Redis入门到精通六】在Spring Boot中集成Redis(含配置和操作演示)
  • 机器学习查漏补缺(5)
  • 【刷题5】在排序数组中查找元素的第一个和最后一个位置
  • Android CCodec Codec2 (十五)C2DmaBufAllocator
  • 自动化办公-python中的open()函数
  • 深入理解 Nuxt.js 中的 app:error:cleared 钩子
  • 【hot100-java】【划分字母区间】