Linux系统架构-----Nginx与Tomcat实现动静分离

一.动静分离概述

  • 动静分离是将网站的静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用的访问
  • 静态资源部署在Nginx,将静态资源部署在Nginx上,后台项目部署到应用服务器上,根据一定规则静态资源的请求,全部去请求nginx服务器,达到动静分离的目标
  • 静态资源部署在CDN上,将项目中的JavaScript,CSS以及img文件都存放在CDN服务器上,将HTML文件一起存放到CDN上之后,可以将静态资源统一放置在一种服务器上,便于前端进行维护;而且用户在访问静态资源时,可以很好利用CDN的优点
  • 后端API提供数据,后端应用提供API,根据前端的请求进行处理,并将处理结果通过JSON格式返回至前端。目前应用主要采用Java平台开发,因此应用服务器主要是Tomcat服务器,现在也开始有部分应用采用node进行开发,应用服务器也开始使用node服务器
  • 前后端域名,动静分离因为静态资源和应用服务分别部署在不同的服务器上,因此会面临域名策略的选择。采用相同域名下,用户请求API时可以避免跨域所带来的问题,相对开发更为快速,工作量也相对小一些。前后端采用不同域名时,需要前后端开发时兼容跨域请求的情况,开发量相对上一种会稍多一些。解决跨域方式最常用的方式就是采用JSONP,还有一种解决方式使用CORS(HTTP访问控制)允许某些域名下的跨域请求
  • 动静分离实现的优缺点
  • 优点:API接口服务化;前后端开发并行;减轻后端服务器的压力,提高静态资源访问速度
  • 缺点:不利于网站SEO(搜索引擎优化);开发量变大;在业务高速发展时需要慎重考虑
  • 动静分离的适用场景
  • 静态文件访问量大,服务器负载高,I/O问题导致用户访问卡顿
  • 静态文件数量大,服务器存储空间不够
  • 静态文件用户访问量大,且分布在各地
  • 移动更新包在某个时间段需要高速下载,且并发下载量高

二.Nginx与Tomcat实现动静分离具体步骤

  • 由于Tomcat本身处理静态效率不高,还会带来资源消耗,因此使用动静分离,将静态请求交由Nginx处理,动态请求交由Tomcat处理
  • Nginx根据客户端请求的url来判断请求的是否是静态资源,如果请求的url包含jpg、png,则由Nginx处理;如果请求的url是.php或者.jsp等,则被认为是动态的,将转发tomcat处理。即Nginx通过url来区分请求的类型,并且转发给不同的服务端
  • 网络结构图

  • 实验环境
类型 IP地址 系统 软件包
Nginx服务器(代理端) 192.168.43.101/24 centos7 nginx-1.12.2.tar.gz
Tomcat服务器(web服务端) 192.168.43.102/24 centos7

jdk-8u231-linux-x64.tar.gz

apache-tomcat-8.5.50.tar.gz

client客户端 192.168.43.103/24 centos7  
  • 部署Nginx服务器
1.在官网获得nginx软件包,前面在nginx的模块解析中有提到,解压
 tar xzvf nginx-1.12.2.tar.gz -C /opt
2.安装相关软件包
yum install pcre-devel zlib-devel gcc gcc-c++ make -y
3.添加nginx用户
useradd -M -s /sbin/nologin nginx
4.编译且安装nginx
cd /opt/nginx-1.12.2/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
##开启http_stub_status_module模块以支持状态统计,便于查看服务器的连接信息

make && make install

5.创建软链接便于控制服务
 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin

6.编辑脚本,使用service工具,控制服务
vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: -99 20
# description: Nginx Service Control Script
#主程序
PROG="/usr/local/nginx/sbin/nginx"
#PID号       
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
chmod +x /etc/init.d/nginx   //添加执行权限
7. 关闭安全性功能,开启nginx服务
[root@localhost nginx-1.12.2]# systemctl stop firewalld
[root@localhost nginx-1.12.2]# setenforce 0
[root@localhost nginx-1.12.2]# service nginx start 
[root@localhost nginx-1.12.2]# netstat -natp | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      38551/nginx: master 

  • 部署Tomcat服务器
1.配置java环境,jdk的软件包可去官网下载,解压软件包
tar xzvf jdk-8u231-linux-x64.tar.gz -C /opt
2.移动文件,便于操作
cd /opt
mv jdk1.8.0_231/ /usr/local
3.配置环境变量
vim /etc/profile    //追加到文末
export JAVA_HOME=/usr/local/jdk1.8.0_231   //指定家目录
export JRE_HOME=${JAVA_HOME}/jre            //java虚拟机
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib   //java函数库
export PATH=${JAVA_HOME}/bin:$PATH     
4.使环境变量运行
source /etc/profile
5.解压tomcat软件包,同样软件包也可以在官网获得
tar xzvf apache-tomcat-8.5.50.tar.gz -C /usr/local
6.修改文件名,便于操作
cd /usr/local
mv apache-tomcat-8.5.50/ tomcat/
7.建立软链接,便于服务控制
cd tomcat
ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/
ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin
8.关闭安全性功能,开启服务
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_231/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost ~]# netstat -natp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      36225/java          

  • 配置Nginx服务器,进行动静分离,对于java文件的请求转发到tomcat处理
1.配置nginx.conf
[root@localhost ~]# cd /usr/local/nginx/conf
[root@localhost conf]# vim nginx.conf

 server {
        listen       80;
        server_name  localhost;
        location ~.*.jsp$ {               //正则表达式,即任何以.jsp结尾的url
        proxy_pass http://192.168.43.102:8080;   //转到192.168.43.102:8080
        proxy_set_header Host $host;
        }
2.配置nginx的站点
[root@localhost ~]# vim /usr/local/nginx/html/index.html 

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">   //html语言,使之支持中文字符
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>静态页面!</h1>
</body>
</html>
3.重启服务
[root@localhost conf]# service nginx stop
[root@localhost conf]# service nginx start
  • 配置tomcat服务器
1.创建tomcat的web目录
[root@localhost tomcat]# cd webapps/
[root@localhost webapps]# mkdir test
[root@localhost webapps]# ls
docs  examples  host-manager  manager  ROOT  test

2.在test中编辑,动态页面的站点
[root@localhost webapps]# vim 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>
</body>
</html>

  • 在客户端上分别访问静态站点和动态站点

  • 把静态资源放到nginx服务器上,当访问动态页面时,调用静态资源
1.在tomcat服务器的动态站点上,添加静态图片
[root@localhost webapps]# vim 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>
<img src="1.jpg"/>  //新添加的图片
</body>
</html>



2.在nginx服务器上,存放图片,而且图片的目录名称要和tomcat中的java项目名称相同
[root@localhost ~]# cd /usr/local/nginx/conf
[root@localhost conf]# vim nginx.conf
location ~.*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {    //正则表达式
   root html;                                    //当有以上为结尾的文件时,去html目录中找
   expires 30d;                            //缓存30天
}

root@localhost conf]# cd /usr/local/nginx/html
[root@localhost html]# rz

[root@localhost html]# ls
1.jpg  50x.html  index.html
[root@localhost html]# mkdir test
[root@localhost html]# mv 1.jpg test/
[root@localhost html]# cd
[root@localhost ~]# service nginx stop
[root@localhost ~]# service nginx start

发布了104 篇原创文章 · 获赞 120 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42761527/article/details/104103082