天天看点

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.179.225 centos7 nginx-1.12.2.tar.gz
Tomcat服务器(web服务端) 192.168.179.132 centos7

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

apache-tomcat-8.5.50.tar.gz

client客户端 192.168.179.132 centos7

1.安装Nginx服务

//解压缩包
tar zxvf nginx-1.12.2.tar.gz -C /opt

//创建用户
useradd -M -s /sbin/nologin nginx

//安装环境依赖包
yum install gcc gcc-c++ pcre pcre-devel zlib-devel -y

//配置
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

//创建软连接,便于管理服务命令
ln -s /usr/local/nginx/sbin/* /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);;
 *)
        exit 1
esac
exit 0

//添加执行权限
chmod +x /etc/init.d/nginx

//添加为系统服务
chkconfig --add nginx 

//启动服务
service nginx start
//验证服务
netstat -ntap | grep nginx
           

2.安装Tomcat服务

tar zxvf jdk-8u91-linux-x64.tar.gz -C /opt/

cd /opt/

//更改环境变量
mv /opt/jdk1.8.0_91/ /usr/local/

vim /etc/profile 

export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

source /etc/profile

//解压缩包
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/shutdown.sh /usr/local/bin/
ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/

//启动服务
startup.sh 

//验证服务开启
netstat -ntap | grep 8080
           

3.配置Nginx服务器,进行动静分离,对于java文件的请求转发到tomcat处理

/在Nginx服务器中操作编辑配置文件nginx.conf
ln -s /usr/local/nginx/conf/nginx.conf /etc/

vim /etc/nginx.conf

server {
省略内容
	location ~.*.jsp$ {
	  proxy_pass http://192.168.179.132:8080;
	  proxy_set_header Host $host;
	}
}

//创建静态页面
vim /usr/local/nginx/html/index.html

<!DOCTYPE html>
<html>
<head>
<title>静态页面</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>静态页面</h1>

<p><em>这个是静态页面</em></p>
</body>
</html>

//重启服务
service nginx stop 
service nginx start	
           

4.配置Tomcat服务

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)
<div>动态页面</div>
</body>
</html>
           

5.把静态资源放到nginx服务器上,当访问动态页面时,调用静态资源

//Tomcat服务操作
vim /ust/local/tomcat/webapps/test/index. jsp

<body>
<div>动态页面</div><br><img src="game. jpg">      //添加页面图片
</body>

//nginx服务操作
vim /usr/local/nginx/conf/nginx.conf
location ~.*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
	root html;
	expires 30d;
	}

(Tomcat 指路径,nginx放图片)
注意:目录名称需要和java项目名称相同
mkdir /usr/local/nginx/html/test
cp /pic/LAMP/game. jpg /usr/local/nginx/html/test

http://192.168.179.225/test/index.jsp
           
Linux系统架构--Nginx与Tomcat实现动静分离