1.Nginx负载均衡实现原理
Nginx实现负载均衡是通过反向代理实现
Nginx 反向代理:将Nginx接收到的请求转发给其它应用服务器处理
Nginx 负载均衡:通过反向代理实现,还可以将nginx接收到的请求转发给多个后端应用服务器处理
Nginx 动静分离:静态页面请求,由nginx自行处理并响应;动态页面请求,则nginx通过反向代理转发给后端应用服务器处理
3. Nginx 配置反向代理的主要参数
✔ upstream 服务池名 {}
♢ 配置后端服务器池,比提供相应数据
✔ proxy_pass http://服务池名
♢ 配置将访问请求转发给后端服务器池的服务器处理
2.Nginx动静分离实现原理
1. 动静分离原理
服务端接收来自客户端的请求中。既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源Nginx转发至后端。
2 Nginx 静态处理优势
• Nginx处理静态页面的效率远高于Tomcat的处理能力
• 若Tomcat的请求量为1000次,则Nginx的请求量为6000次
• Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M
• Nginx处理静态资源的能力是Tomcat处理的6倍
实验;
1.准备两台服务器,Nginx作为负载均衡器,Tomcat作为应用服务器
Nginx 服务器:192.168.73.110:80
Tomcat服务器2:192.168.73.100:8080 192.168.73.100:8081 192.168.73.100:8083
2.部署Nginx 负载均衡器
rz -E nigxn repo
再使用yum安装比较方便
3.部署一台tomcat多实例
1.修改tomcat主配置文件 server.xml 中的三个端口号 8080 8005 8009,每个实例要不一样
2.修改tomcat启动停止脚本 startup.sh shutdown.sh ,添加环境变量 export TOMCAT_HOME CATALINA_HOME CATALINA_BASE 都指向每个实例各自的工作目录
4.在使用mkdir /usr/local/tomcat/webapps/xy101
创建动态文件.jsp$的动态文件 test.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("动态页面 1,http://www.test1.com"); %>
</body>
</html>
~
在tomcat2 tocat3 中同理
5.
(1)在http配置块中使用upstream定义后端服务器列表名称和节点参数
#配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大
(2)在server配置块中使用location匹配用户请求的动态页面的URL路径,使用 proxy_pass 基于协议代理转发。
location ~ \.jsp$ {
proxy_pass http://tomcat_server;
#配置Nginx处理动态页面请求,将 .jsp文件请求转发到Tomcat 服务器处理
proxy_set_header HOST $host;
#设置后端的Web服务器可以获取远程客户端的真实IP
proxy_set_header x_Real_IP $remote_addr;
#把$remote_addr赋值给X-Real-IP,来获取源IP
proxy_set_header X_Forwarded_For $proxy_add_x_forwarded_for;
}
#在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来
然后重启nginx 测试
测试动静分离:
静态:分配给nginx服务器
动态:分配给tomcat服务器
负载均衡: 不断测试刷新页面
实验二:
四层反向代理:基于 IP 和 端口 实现的代理转发(根据IP和端口来转发请求)
1.将web2的nginx服务器按照web1的设置一下
2.再加入一个nginx服务器作为负载均衡器192.168.73.130
(1)编译安装时需要添加 stream 四层代理模块 ./configure --with-stream
(2)在 http 配置块同层级,一般在 http 配置块上面添加 stream 配置块,在 stream 配置块里使用upstream定义后端服务器列表名称和节点参数以及使用server配置块定义监听端口和转发配置
3.验证:
静态页面:静态页面分配给nginx 因为有两个后端服务器列表刷新可以轮询
动态页面:动态页面访问有后面两个nginx服务器分配给后面的tomcat服务器处理 刷新也可以轮询