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

目录

一、代理

1.概述

二、Nginx反向代理

[1.七层反向代理 - 动静分离](#1.七层反向代理 - 动静分离)

[2.四层反向代理 - 负载均衡](#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同步复制实现会话保持

相关推荐
whyutianict_vv1 小时前
云计算 HCIE 认证体系解析:HCIA/HCIP/HCIE 三级科目与知识边界
linux·运维·云计算
IT19957 小时前
Fail2Ban 防护 MySQL 实战|登录失败 3 次,IP 封禁 24 小时
数据库·mysql
夕除8 小时前
redis--IO 多路复用(select + poll)
数据库·sql
青瓦梦滋8 小时前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
桌面运维家9 小时前
旧电脑跑不动课程软件,VDI云桌面怎样接着用?
运维·服务器·虚拟化·pve·vdi·云桌面
zhang133830890759 小时前
传统机械三杯式风速传感器易磨损冻堵?CG-88金属超声波风速风向传感器给出免运维方案
运维·服务器·网络·人工智能·自动化
知已难寻9 小时前
第 2 篇 · 云的地基:服务器、存储、网络三大基础设施
运维·服务器·网络·云原生·云计算·负载均衡·1024程序员节
IpdataCloud11 小时前
批量查IP的API接口怎么选?免费API配额瓶颈与离线库本地批量方案实测
网络·网络协议·tcp/ip
2601_9498477511 小时前
bcrypt.js 跨端三方库仓颉适配全流程
linux·运维·ubuntu
m0_6399069411 小时前
Linux 操作系统入门:目录结构、服务排查常用命令、Shell 脚本基础
linux·运维·后端