目录:
一、Nginx负载均衡实现原理
二、Nginx动静分离实现原理
一、Nginx负载均衡实现原理
1、Nginx实现负载均衡是通过反向代理实现
2、反向代理原理
3、Nginx 配置反向代理的主要参数
(1) upstream 服务池名 {}
配置后端服务器池,比提供相应数据
(2)proxy_pass http://服务池名
配置将访问请求转发给后端服务器池的服务器处理
二、Nginx动静分离实现原理
1、动静分离原理
服务端接收来自客户端的请求中。既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源Nginx转发至后端
2、Nginx 静态处理优势
- Nginx处理静态页面的效率远高于Tomcat的处理能力
- 若Tomcat的请求量为1000次,则Nginx的请求量为6000次
- Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M
- Nginx处理静态资源的能力是Tomcat处理的6倍
三、Nginx+Tomcat 负载均衡、动静分离集群部署
1、准备三台服务器,Nginx作为负载均衡器,Tomcat作为应用服务器
1 Nginx 服务器:192.168.116.100:80
2 Tomcat服务器1:192.168.116.70:8080
3 Tomcat服务器2:192.168.116.120:8080 192.168.116.120:8081
2、部署Nginx 负载均衡器
1 systemctl stop firewalld
2 setenforce 0
3
4 yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
5
6 useradd -M -s /sbin/nologin nginx
1 cd /opt
2 tar zxvf nginx-1.12.0.tar.gz -C /opt/
3
4 cd nginx-1.12.0/
5 ./configure \
6 --prefix=/usr/local/nginx \
7 --user=nginx \
8 --group=nginx \
9 --with-file-aio \ #启用文件修改支持
10 --with-http_stub_status_module \ #启用状态统计
11 --with-http_gzip_static_module \ #启用 gzip静态压缩
12 --with-http_flv_module \ #启用 flv模块,提供对 flv 视频的伪流支持
13 --with-http_ssl_module #启用 SSL模块,提供SSL加密功能
--with-stream #启用stream模块,开启四层调度
14 ----------------------------------------------------------------------------------------------------------
15 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module
--with-stream
1 make && make install
2
3 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
4
5 vim /lib/systemd/system/nginx.service
6 [Unit]
7 Description=nginx
8 After=network.target
9 [Service]
10 Type=forking
11 PIDFile=/usr/local/nginx/logs/nginx.pid
12 ExecStart=/usr/local/nginx/sbin/nginx
13 ExecrReload=/bin/kill -s HUP $MAINPID
14 ExecrStop=/bin/kill -s QUIT $MAINPID
15 PrivateTmp=true
16 [Install]
17 WantedBy=multi-user.target
18
19 chmod 754 /lib/systemd/system/nginx.service
20 systemctl start nginx.service
21 systemctl enable nginx.service
3、部署2台Tomcat 应用服务器
Tomcat应用服务器1
1 systemctl stop firewalld
2 setenforce 0
3
4 tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
5
6 vim /etc/profile.d/java.sh
7 export JAVA_HOME=/usr/local/jdk1.8.0_91
8 export JRE_HOME=${JAVA_HOME}/jre
9 export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
10 export PATH=${JAVA_HOME}/bin:$PATH
11
12 source /etc/profile.d/java.sh
1 tar zxvf apache-tomcat-8.5.16.tar.gz
2
3 mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat
4
5 /usr/local/tomcat/bin/shutdown.sh
6 /usr/local/tomcat/bin/startup.sh
7
8 netstat -ntap | grep 8080
Tomcat应用服务器2
操作在上篇文章,传送门在此
https://www.cnblogs.com/aacoffee/p/15152228.html
4、动静分离配置
Tomca服务器1 配置
1 mkdir /usr/local/tomcat/webapps/test
2 vim /usr/local/tomcat/webapps/test/index.jsp
3 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
4 <html>
5 <head>
6 <title>JSP test1 page</title> #指定为 test1 页面
7 </head>
8 <body>
9 <% out.println("动态页面 1,http://www.test1.com");%>
10 </body>
11 </html>
1 vim /usr/local/tomcat/conf/server.xml
2 #由于主机名 name 配置都为 localhost,需要删除前面的 HOST 配置
3 <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
4 <Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true">
5 </Context>
6 </Host>
7
8 /usr/local/tomcat/bin/shutdown.sh
9 /usr/local/tomcat/bin/startup.sh
Tomcat服务器2 配置(多实例)
Tomcat服务器2--第一实例配置
1 mkdir /usr/local/tomcat/tomcat1/webapps/test /usr/local/tomcat/tomcat2/webapps/test
2
3 vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
4 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
5 <html>
6 <head>
7 <title>JSP test2 page</title> #指定为 test2 页面
8 </head>
9 <body>
10 <% out.println("动态页面 2,http://www.test2.com");%>
11 </body>
12 </html>
1 vim /usr/local/tomcat/tomcat1/conf/server.xml
2 #删除前面的 HOST 配置
3 <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
4 <Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true" />
5 </Host>
6
7 /usr/local/tomcat/tomcat1/bin/shutdown.sh
8 /usr/local/tomcat/tomcat1/bin/startup.sh
Tomcat服务器2--第二实例配置
1 vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp
2 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
3 <html>
4 <head>
5 <title>JSP test3 page</title> #指定为 test3 页面
6 </head>
7 <body>
8 <% out.println("动态页面 3,http://www.test3.com");%>
9 </body>
10 </html>
1 vim /usr/local/tomcat/tomcat2/conf/server.xml
2 #删除前面的 HOST 配置
3 <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
4 <Context docBase="/usr/local/tomcat/tomcat2/webapps/test" path="" reloadable="true" />
5 </Host>
6
7 /usr/local/tomcat/tomcat2/bin/shutdown.sh
8 /usr/local/tomcat/tomcat2/bin/startup.sh
Nginx server 配置
1 #准备静态页面和静态图片
2 echo '<html><body><h1>这是静态页面</h1></body></html>' > /usr/local/nginx/html/index.html
3 mkdir /usr/local/nginx/html/img
4 cp /root/game.jpg /usr/local/nginx/html/img
5
6 vim /usr/local/nginx/conf/nginx.conf
7 ......
8 http {
9 ......
10 #gzip on;
11
12 #配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大
13 upstream tomcat_server {
14 server 192.168.116.70:8080 weight=1;
15 server 192.168.116.120:8080 weight=1;
16 server 192.168.116.120:8081 weight=1;
17 }
18
19 server {
20 listen 80;
21 server_name www.kgc.com;
22
23 charset utf-8;
24
25 #access_log logs/host.access.log main;
26
27 #配置Nginx处理动态页面请求,将 .jsp文件请求转发到Tomcat 服务器处理
28 location ~ .*\.jsp$ {
29 proxy_pass http://tomcat_server;
30 #设置后端的Web服务器可以获取远程客户端的真实IP
31 ##设定后端的Web服务器接收到的请求访问的主机名(域名或IP、端口),默认HOST的值为proxy_pass指令设置的主机名。如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来在反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。
32 proxy_set_header HOST $host;
33 ##把$remote_addr赋值给X-Real-IP,来获取源IP
34 proxy_set_header X-Real-IP $remote_addr;
35 ##在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来
36 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
37 }
38
39 #配置Nginx处理静态图片请求
40 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
41 root /usr/local/nginx/html/img;
42 expires 10d;
43 }
44
45 location / {
46 root html;
47 index index.html index.htm;
48 }
49 ......
50 }
51 ......
52 }
测试效果
1 测试静态页面效果
2 浏览器访问 http://192.168.116.100/
3 浏览器访问 http://192.168.116.100/game.jpg
4
5 测试负载均衡效果,不断刷新浏览器测试
6 浏览器访问 http://192.168.116.100/index.jsp