Nginx+Tomcat实现负载均衡、动静分离集群
一、Nginx负载均衡原理
Nginx服务器作为前端,Tomcat服务器作为后端,web页面请求由Nginx服务来进行转发。
但是不是把所有的web请求转发,而是将静态页面请求Nginx服务器自己来处理,动态页面请求,转发给后端的Tomcat服务器来处理。
Tomcat是属于轻量级的应用服务器,可接受访问量可能会不足,所以我们需要多台Tomcat服务器,然后通过Nginx配置权重来进行挑选Tomcat服务器去进行处理,负载均衡的一种策略。
Nginx服务器
1、首页使用精准匹配 2、静态页面使用正则匹配自己处理 3、动态页面使用正则匹配jsp结尾的请求,使用proxy_pass转发给Tomcat服务器
1)Nginx静态处理优势
Nginx处理静态页面的效率远高于Tomcat的处理能力 若Tomcat的请求量为1000次,则Nginx的请求量为6000次 Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3 .6M Nginx处理静态资源的能力是Tomcat处理的6倍
二、Nginx动静分离原理
服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源有Nginx提供服务,动态资源Nginx转发至后端。
二、Nginx配置反向代理主要参数
配置后端服务器池,以提供响应数据
upstream 服务器名 {}
配置将访问请求转发给后端服务器池名
proxy_pass http://服务器名
三、实验(图文详解)
1、Nginx+Tomcat负载均衡、动静分离
2、Nginx作为负载均衡器,Tomcat作为应用服务器
3、所需安装包:nginx-1.12.0.tar.gz / apache-tomcat-9.0.16.tar.gz / jdk-8u201-linux-x64.rpm
1.编译安装Nginx
2.部署2台Tomcat 应用服务器
3.动静分离配置
1)Tomcat Server1 配置
mkdir /usr/local/tomcat/webapps/accpvim /usr/local/tomcat/webapps/accp/index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><html><head><title>JSP test2 page</title></head><body><% out.println("动态页面:this is server1");%></body></html>vim /usr/local/tomcat/conf/server.xml<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context docBase="/usr/local/tomcat/webapps/accp" path="" reloadable="true" /></Host>#重启tomcat/usr/local/tomcat/bin/shutdown.sh /usr/local/tomcat/bin/startup.sh
2)Tomcat Server2 配置
mkdir /usr/local/tomcat/webapps/accpvim /usr/local/tomcat/webapps/accp/index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><html><head><title>JSP test2 page</title></head><body><% out.println("动态页面:this is server2");%></body></html>vim /usr/local/tomcat/conf/server.xml<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context docBase="/usr/local/tomcat/webapps/accp" path="" reloadable="true" /></Host>/usr/local/tomcat/bin/shutdown.sh /usr/local/tomcat/bin/startup.sh
4.Nginx server 配置
#准备静态页面和静态图片
echo '<html><body><h1>这是默认目录静态页面</h1></body></html>' > /usr/local/nginx/html/index.html
mkdir /usr/local/nginx/html/accp #图片的存放目录
2
3
#配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
#gzip on;
upstream tomcat_server { #反向代理模块,定义后端服务器http模块内,server模块外添加
server 192.168.190.12:8080 weight=1;
server 192.168.190.13:8080 weight=1;
}
server {
listen 80;
server_name www.accp.com; #监听地址
charset utf-8;
#access_log logs/host.access.log main;
#配置Nginx处理动态页面请求,将 .jsp文件请求转发到Tomcat 服务器处理
location ~ .*.jsp$ {
proxy_pass http://tomcat_server;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#root用于定义根目录位置
#配置Nginx处理静态图片请求
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
root /usr/local/nginx/html/accp;
expires 10d;
}
#80端口直接到首页,这个/要放在最下面
location / {
root html/abcvue; #abcvue是vue项目打包
index index.html index.htm;
try_files $uri $uri/ =404; #处理刷新后404
}
systemctl restart nginx.service
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45