Nginx+Tomcat负载均衡,动静分离群集

Nginx反向代理原理

Nginx 反向代理:将Nginx接收到的请求转发给其它应用服务器处理

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

Nginx 动静分离:静态页面请求,由nginx自行处理并响应;动态页面请求,则nginx通过反向代理转发给后端应用服务器处理

他的主要思想就是实现将客户发来的的请求转发给后台服务器进行操作,当后台有多台服务器时,就会进行平均或者自定义的数据转发来实现负载均衡的效果,降低每一台后端服务器的压力,动静分离则是充分利用各个服务器的优点来发挥,静态页面交给专业的静态页面去处理,动态的则交给动态页面去处理,来实现作用。

Nginx反向代理的类型

七层反向代理

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

配置:

1)在http配置块中使用upstream定义后端服务器列表名称和节点参数

http {

upstream 服务器池名称 {

server IP1:PORT1 weight=1;

server IP2:PORT2 weight=1;

......

}

2)在server配置块中使用location匹配用户请求的动态页面的URL路径,使用 proxy_pass 基于协议代理转发

server {

......

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;

}

......

}

......

}

四层反向代理

四层反向代理:基于 IP 和 端口 实现的代理转发(根据用户请求的IP和端口来转发请求),通常用于做 网关访问入口的负载均衡器 等应用场景

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

2)在 http 配置块同层级,一般在 http 配置块上面添加 stream 配置块,在 stream 配置块里使用upstream定义后端服务器列表名称和节点参数以及使用server配置块定义监听端口和转发配置

stream {

upstream 服务器池名称 {

server IP1:PORT1 weight=1;

server IP2:PORT2 weight=1;

......

}

server {

listen IP:PORT;

proxy_pass 服务器池名称;

}

}

http {....}

四层反向代理 比 七层反向代理 转发性能更高于;

七层反向代理 比 四层反向代理 转发功能更多、更灵活

Nginx的负载均衡模式

Nginx的负载均衡模式(调度模式、调度算法、调度策略),在 upstream 配置块里设置

轮询(round robin、rr) 是nginx的默认调度模式,按照时间顺序逐一分配请求

加权轮询(weight round robin、wrr) 使用weight参数设置权重,weight值越高的节点被分配请求的概率越大

least_conn(最少连接、最小连接) 优先将请求分配给当前连接数最少的节点

ip_hash(源地址哈希) 根据客户端IP做hash缓存调度,会将请求分配给固定的一个节点

url_hash(目的地址哈希) 根据客户端请求访问的URL路径做hash缓存调度,会将请求分配给固定的一个节点。需要另外按照第三方模块支持

fair 优先将请求分配给响应时间最少的节点。需要另外按照第三方模块支持

random 随机分配请求

hash nginx全局变量 consistent 一致性hash算法,根据nginx全局变量的值来做hash缓存调度

比如 hash $remote_addr consistent 根据客户端ip做hash缓存调度,是ip_hash的加强版

举例:

upstream 服务器池名称 {

server IP1:PORT1 weight=权重 max_fails=最大的失败次数 fail_timeout=暂停服务的时间 max_conns=最大并发连接数;

......

least_conn;/ip_hash;/hash request_uri;/fair;/random;/hash remote_addr consistent;

}

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

1)ip_hash 或 一致性hash算法 基于客户端IP做hash缓存将请求发送给同一个后端节点服务器来实现会话保持,但是此方法容易导致负载失衡问题

2)sticky_cookie_insert 基于cookie来判断实现会话保持

upstream backend {

server ...... ;

sticky_cookie_insert srv_id expires=浏览器中保持cookie的时间 domain=cookie的域名 path=cookie的路径;

}

3)后端应用服务器自身通过相关机制设置,使用缓存数据库为后端节点服务器做session同步复制实现会话保持

相关推荐
努力进修9 小时前
跨地域传文件太麻烦?Nginx+cpolar 让本地服务直接公网访问
运维·nginx·cpolar
rit843249915 小时前
在Ubuntu上配置Nginx实现开机自启功能
数据库·nginx·ubuntu
一勺菠萝丶16 小时前
芋道后端部署后总自己挂?从 Nginx 报错到 OOM Kill 的完整排查与修复(2核2G 服务器实战)
服务器·chrome·nginx
神奇侠202419 小时前
基于spring-boot-admin实现对应用、数据库、nginx等监控
java·数据库·nginx
IT小哥哥呀21 小时前
Nginx高可用配置实战:负载均衡 + 健康检查 + 动态扩展
运维·nginx·负载均衡·devops·日志分析·openresty·动态扩展
cici158741 天前
MyBatis注解的运用于条件搜索实践
java·tomcat·mybatis
toooooop81 天前
Nginx 反向代理 HTTPS CDN 配置检查清单(避坑版)
运维·nginx·https·cdn
群联云防护小杜1 天前
国产化环境下 Web 应用如何满足等保 2.0?从 Nginx 配置到 AI 防护实战
运维·前端·nginx
STUPID MAN1 天前
Linux使用tomcat发布vue打包的dist或html
linux·vue.js·tomcat·html
尽兴-1 天前
[特殊字符] 微前端部署实战:Nginx 配置 HTTPS 与 CORS 跨域解决方案(示例版)
前端·nginx·https·跨域·cors·chrom