文章目录
- 一、为什么要实现动静分离
- 二、动静分离的基本过程
- 三、环境说明
- 四、部署过程
- 4.1、nginx 服务器部署
- 4.2、Tomcat 服务器部署
- 4.3、动静分离配置
- 4.4、配置验证
一、为什么要实现动静分离
- 动静分离是将网站的静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用的访问
- nginx 处理静态资源的能力超强。
主要是nginx处理静态页面的效率远高于 tomcat 的处理能力,如果tomcat的请求量为1000次,则nginx的请求量为6000次,tomcat每秒的吞吐量为0.6M,nginx的每秒吞吐量为3.6M,可以说,nginx处理静态资源的能力是tomcat处理能力的6倍,优势可见一斑。 - 动态资源和静态资源分开,使服务器结构更清晰。
二、动静分离的基本过程
- 如下图所示,我们部署了 nginx 和 tomcat 服务器,把所有的静态资源都放置在nginx的webroot目录下面,把动态请求的程序都放在 tomcat 的webroot目录下面。
- 当客户端访问服务端的时候,如果是静态资源的请求,就直接到nginx的webroot目录下面获取资源。
- 如果是动态资源的请求,nginx利用反向代理的原理,把请求转发给tomcat进行处理,这样就实现了动静分离,提高了服务器处理请求的性能。
三、环境说明
服务类型 | IP地址 | 软件包 |
Nginx服务器 | 192.168.100.128/24 | nginx-1.12.2.tar.gz |
Tomcat服务器 | 192.168.100.131/24 | jdk-8u91-linux-x64.tar.gz、apache-tomcat-8.5.16.tar.gz |
win10客户端 | 192.168.100.0网段 |
仅供参考:(包版本有所不同)
- 百度云盘下载链接:
- nginx:https://pan.baidu.com/s/1gI6Q2qJHmQUIqJVqut_AXA
- Tomcat:https://pan.baidu.com/s/1ibLOT9wBfVsALMqBOPUVEA 提取码:prry
四、部署过程
4.1、nginx 服务器部署
//nginx安装包如果需要其他版本,可以到官网下载。
//安装依赖包
yum -y install gcc gcc-c++ make pcre-devel zlib-devel
//挂载本地共享文件夹,解压nginx安装包
tar z xvf nginx-1.12.2.tar.gz -C /opt
//添加nginx用户
useradd -M -s /sbin/nologin nginx
//编译且安装nginx
cd /opt/nginx-1.12.2/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
make && make install
//创建软链接便于控制服务
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin
//编辑脚本,使用service工具,控制服务
vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: - 99 20
# description: Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$PROG
;;
stop)
kill -s QUIT $(cat $PIDF)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PIDF)
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
//添加执行权限,将脚本文件添加到服务列表中
cd /etc/init.d
chmod +x nginx
chkconfig --add nginx
chkconfig --level 35 nginx on
//关闭防火墙,开启nginx服务
systemctl stop firewalld
setenforce 0
service nginx start
netstat -natp | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 36517/nginx: master
我们的服务搭建成功!
4.2、Tomcat 服务器部署
//解压软件包jdk
tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
//配置环境变量,将下面的代码追加到末尾处。
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91 //指定家目录
export JRE_HOME=${JAVA_HOME}/jre //java虚拟机
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib //java函数库
export PATH=${JAVA_HOME}/bin:$PATH
source /etc/profile //使环境变量生效
//解压tomcat软件包
tar zxvf apache-tomcat-8.5.16.tar.gz -C /usr/local/
//修改文件名,便于操作
cd /usr/local
mv apache-tomcat-8.5.16 tomcat
//建立软链接,便于服务控制
ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/
ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin
//关闭防火墙,开启tomcat服务
systemctl stop firewalld
setenforce 0
startup.sh #开启服务
netstat -natp | grep 8080 #查看服务是否启动
这时打开一台 win10虚拟机 作为 client 服务端,在浏览器输入nginx服务器的IP地址:192.168.100.128和 tomcat 服务器的IP地址:192.168.100.131:8080
4.3、动静分离配置
//配置nginx.conf,开启反向代理功能。
vim /usr/local/nginx/conf/nginx.conf
server {
. . .省略. . .
location ~.*.jsp$ { //正则表达式,即任何以.jsp结尾的url
proxy_pass http://192.168.100.131:8080; //转到192.168.100.131:8080
proxy_set_header Host $host;
}
//创建nginx的站点内容
vim /usr/local/nginx/html/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> #第一处添加,使之支持中文字符
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>静态页面!</h1> #第二处修改
<p>这是个静态页面</p> #第三处修改
</body>
</html>
重启服务
service nginx stop
service nginx start
- 在客户端上访问静态站点
//创建tomcat的web目录和站点
mkdir /usr/local/tomcat/webapps/test
//站点内容
vim /usr/local/tomcat/webapps/test/index.jsp
<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/ html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>动态页面</title>
</head>
<body>
<h1>动态页面</h1>
<p>这是个动态页面</p>
</body>
</html>
- 在客户端的浏览器输入http://192.168.100.128/test/index.jsp 访问动态站点,nginx 服务器发现是动态请求,反向代理给 Tomcat 服务器处理。
4.4、配置验证
//在Tomcat服务器上声明图片的位置
vim /usr/local/tomcat/webapps/test/index.jsp
<body>
<img src="game.jpg"/>
#添加页面图片,这个图片在nginx中存放,但是在tomcat里声明
</body>
//如果图片过大,可以通过设置参数改变图片大小,例子如下:
<img src="game.jpg" height="150px" width="230px"/>
//在nginx服务器上,存放图片,而且图片的目录名称要和tomcat中的java项目名称相同
vim /usr/local/nginx/conf/nginx.conf
在server{}段里添加
location ~.*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
root html;
expires 30d;
}
(Tomcat指路径,nginx放图片)
注意:目录名称需要和 java项目(webapps)名称相同
mkdir /usr/local/nginx/html/test/
在/usr/local/nginx/html/test/目录下放一张图片
service nginx stop
service nginx start
在客户端浏览器中输入http://192.168.100.128/test/index.jsp 出现存放的图片