Nginx 负载均衡和动静分离
- Nginx 动静分离 处理优势
1、Nginx处理静态页面的效率远高于Tomcat的处理能力
2、若Tomcat的请求量为1000次,则Nginx的请求量为6000次
3、Tomcat每秒的吞吐量为0.6M,则Nginx的每秒吞吐量为3.6M
4、Nginx处理静态资源的能力是Tomcat处理能力的6倍
应用场景
- 通常情况下,一台 Tomcat 站点由于可能出现单点故障及无法应付过多客户复杂多样的 请求等问题,不能单独应用于生产环境下,所以需要一套更可靠的解决方案来完善 Web 站点 架构。
- Nginx 是一个非常强大的静态 web 服务,Tomcat 处理动态请求效率不高,而一般网站大
多数的内容都是静态文件(如图片、html、css、js 等),经过 Nginx 前端的反向代理加速 和过滤,后端 Tomcat 处理请求的压力便可大大减少,只需负责处理动态内容就可以了。在 性能与稳定性的权衡下,使用 Nginx+Tomcat 搭配便可让它们在各自擅长的领域大展拳脚
部署 Nginx + Tomcat 群集
1台 Nginx 调度器(ip:20.0.0.21/24
软件安装包:nginx-1.15.9.ta
一张照片)
1台 Tomcat 1服务器(ip:20.0.0.22/24
软件安装包:apache-tomcat-8.5.23.tar
jdk-8u 144-linux-x64.tar)
1台 Tomcat2 服务器(ip:20.0.0.23/24
软件安装包:apache-tomcat-8.5.23.tar
jdk-8u 144-linux-x64.tar)
- 所有服务器关闭防火墙、核心防护,安装本地yum源
配置 Tomcat 1 节点服务器(20.0.0.22) Tomcat 2 节点服务器(20.0.0.23)
在安装 Tomcat 之前必须先安装 JDK
安装 JDK 部分:
1、将安装包 apache-tomcat-8.5.23.tar 和 jdk-8u 144-linux-x64.tar 上传至 /opt 目录下
[root@localhost ~]# java -version
-bash: java: command not found ####报错,则没有安装 java
[root@localhost ~]# cd /opt
[root@localhost opt]# tar xzvf jdk-8u144-linux-x64.tar.gz
[root@localhost opt]# cp -rv jdk1.8.0_144/ /usr/local/java
[root@localhost opt]# vi /etc/profile
#######在文件末尾添加以下四行
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export PATH=$PATH:/usr/local/java/bin
export CLASSPATH=./:/usr/local/java/lib:/usr/local/java/jre/lib
[root@localhost opt]# source /etc/profile
[root@localhost opt]# java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
12345678910111213141516171819
安装 Tomcat 部分:
[root@localhost opt]# tar zxvf apache-tomcat-8.5.23.tar.gz
[root@localhost opt]# mv apache-tomcat-8.5.23 /usr/local/tomcat1
[root@localhost opt]# ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup
[root@localhost opt]# ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown
[root@localhost opt]# tomcatup ####启动
Using CATALINA_BASE: /usr/local/tomcat8
Using CATALINA_HOME: /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME: /usr/local/java/jre
Using CLASSPATH: /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.
[root@localhost opt]# yum -y install net-tools ####安装工具包
[root@localhost opt]# netstat -anpt | grep 8080 #####检测是否启动,8080端口是否工作正常
4、在真机上测试是否工作正常
网页输入: 20.0.0.22:8080出现tomcat页面
编辑测试页面
[root@localhost ~]# mkdir -pv /web/webapp1
在webapp1 目录下建立一个 index.jsp 的测试页面
[root@localhost ~]# vi /web/webapp1/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>程序员</title>
</head>
<body>
<% out.println("聪明绝顶,http://www.51xit.com");%>
</body>
<body>
<div>金刚</div><br><img src="logo.jpg">
</body>
</html>
[root@localhost ~]# vi /usr/local/tomcat8/conf/server.xml
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"> ######在下面插入
<Context docBase="/web/webapp1" path="" reloadable="false" >
</Context>
[root@localhost ~]# tomcatdown
[root@localhost ~]# tomcatup
5、真机测试
通过浏览器访问 : 20.0.0.22:8080 20.0.0.23:8080
显示“金刚”文字,并没有出现 logo.jpg 图片,原因是由于静态图片暂时没配,所以加载不出来
配置 Nginx 调度器(20.0.0.21)
在 Nginx 服务器 上安装 Nginx,反向代理到两个 Tomcat 站点,并实现 负载均衡
[root@nginx1 ~]# tar zxvf nginx-1.15.9.tar.gz -C /opt '
[root@nginx1 ~]# cd /opt/nginx-1.15.9/
[root@nginx1 nginx-1.15.9]# ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_stub_status_module
[root@nginx1 nginx-1.15.9]# make && make install '//编译安装'
[root@nginx1 nginx-1.15.9]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ '//创建nginx命令软连接'
[root@nginx1 nginx-1.15.9]# nginx -t '//检查语法'
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
添加 Nginx 系统服务
[root@localhost nginx-1.15.9]# vi /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[root@localhost ~]# chmod 754 /lib/systemd/system/nginx.service
[root@localhost ~]# systemctl enable nginx.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to
/usr/lib/systemd/system/nginx.service.
1234567891011121314151617181920
编辑 Nginx 静态页面文件
[root@localhost nginx-1.15.9]# vi /usr/local/nginx/html/index.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>静态页面</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>静态页面</h1>
<p>这是个静态页面</p>
</body>
</html>
在 http {…} - server{…}中加入 location ~ .*.jsp${…} 动态请求条件规则 以及 静态图片请求规则;
把 Nginx 的默认站点通过 proxy_pass 方法代理到了设定好的 tomcat_server 负载均衡服务器组上。
[root@localhost nginx-1.15.9]# vi /usr/local/nginx/conf/nginx.conf
http {
.........省略内容
#gzip on; #####这行往下插入以下4行
upstream tomcat_server {
server 20.0.0.22:8080 weight=1;
server 20.0.0.23:8080 weight=1;
}
server { #####到这行结束
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main; ######在这行插入以下 location ~ .*.jsp$ {}(表示动态页面正则);location ~ .*\.()${}(表示静态图片正则)
location ~ .*.jsp$ {
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Client-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tomcat_server;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
root /usr/local/nginx/html/img;
expires 30d;
}
location / { ####到这行结束
root html;
index index.html index.htm;
创建静态文件目录
[root@localhost nginx-1.15.9]# cd
[root@nginx ~]# mkdir /usr/local/nginx/html/img
[root@nginx ~]# cp /opt/logo.jpg /usr/local/nginx/html/img
[root@localhost ~]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf、查看 Nginx 服务进程。
[root@localhost ~]# ps aux | grep nginx
root 30035 0.0 0.0 20564 620 ? Ss Sep26 0:00 nginx: master process nginx
www 30036 0.0 0.0 21020 1332 ? S Sep26 0:00 nginx: worker process
root 30121 0.0 0.0 112708 976 pts/0 S+ 01:07 0:00 grep --color=auto nginx
查看端口号
[root@localhost ~]# netstat -anpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 30035/nginx: master
群集安装完毕,进行测试
(1)测试静态页面效果 打开浏览器访问 20.0.0.21/,可以看到访问到 nginx 静态页面
(2)测试负载均衡效果 打开浏览器访问 http://20.0.0.21/index.jsp。 不断刷新浏览器测试,
可以看到由于权重相同,页面会反复在以下两个页面来回切换。 第一次访问,出现 22 的测试页面,
并且能正常加载 nginx 上的静态页面图片,刷新后,第二次访问,出现 23 的测试页面,
表示负载均衡群集搭建成功,已经可以 在两个 Tomcat server 站点进行切换了。