群集架构----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来区分请求的类型,并且转发给不同的服务端

  • 网络结构图

    mark

三: 操作过程

3.1: 实验环境

类型IP地址系统软件包
Nginx服务器(代理端)192.168.100.140/24centos7nginx-1.12.2.tar.gz
Tomcat服务器(web服务端)192.168.100.140/24centos7jdk-8u91-linux-x64.tar.gz; apache-tomcat-8.5.16.tar.gz
client客户端192.168.100.140/24centos7

3.2: 实验拓扑

  • mark

3.3 : 配置过程

  • 部署Nginx服务器

    [root@nginx ~]# mount.cifs //192.168.1.150/qq-Download /mnt
    //远程挂载共享文件夹获取安装包
    1.在官网获得nginx软件包,前面在nginx的模块解析中有提到,解压
    cd /mnt
    tar -zxvf nginx-1.12.0.tar.gz -C /usr/local/
    
    2.安装相关软件包
    systemctl stop firewalld.service
    setenforce 0
    yum -y install pcre-devel zlib-devel gcc-c++
    
    3.添加nginx用户
    useradd -M -s /sbin/nologin nginx
    
    4.编译且安装nginx
    cd /usr/local/nginx-1.12.0
    
    ./configure \
    --prefix=/usr/local/nginx \
    --user=nginx \
    --group=nginx \
    --with-http_stub_status_module
    
    make && make install
    
    5.创建软链接便于控制服务
    ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
    nginx -t  #验证语法格式
    
    6.编辑脚本,使用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
    
    chmod +x /etc/init.d/nginx
    chkconfig --add nginx
    7. 关闭安全性功能,开启nginx服务
    service nginx start
    netstat -ntap | grep 80
    
  • 部署Tomcat服务器

    1.配置java环境,jdk的软件包可去官网下载,解压软件包
    tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
    systemctl stop firewalld
    
    2.配置环境变量
    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
    
    4.使环境变量运行
    source /etc/profile
    
    5.解压tomcat软件包,同样软件包也可以在官网获得
    tar zxvf apache-tomcat-8.5.16.tar.gz -C /usr/local
    
    6.修改文件名,便于操作
    cd /usr/local
    mv apache-tomcat-8.5.16/ tomcat
    
    7.建立软链接,便于服务控制
    ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/
    ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin/
    
    8.关闭安全性功能,开启服务
    startup.sh
    netstat -ntap | grep 8080
    
  • 配置Nginx服务器,进行动静分离,对于java文件的请求转发到tomcat处理

    1.配置nginx.conf
    //在nginx服务器中操作编辑配置文件nginx.conf
    
     server {
            listen       80;
            server_name  localhost;
            location ~.*.jsp$ {               //正则表达式,即任何以.jsp结尾的url
            proxy_pass http://192.168.100.150:8080;   //转到192.168.100.150:8080
            proxy_set_header Host $host;
            }
    
    nginx -t		
    2.配置nginx的站点
    //创建静态页面
    vim /usr/local/nginx/html/index.html
    //全删,添加以下内容
    <!DOCTYPE html>
    <html>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html; 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>
    
    3.重启服务
    service nginx stop
    service nginx start
    
  • 配置tomcat服务器,tomcat处理动态请求

    1.创建tomcat的web目录
    mkdir /usr/local/tomcat/webapps/test
    2.在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>
    
    3.测试
    //访问静态
    http://192.168.100.140
    //访问动态
    http://192.168.100.140/test/index.jsp
    测试nginx接受动态请求是否交给后端tomcat 192.168.100.150去处理
    

    mark

    mark

  • 当动态JSP交给Tomcat处理,jsp文件包含静态图片,怎么去请求Nginx处理静态图片?

    //Tomcat服务操作
    1.在tomcat服务器的动态站点上,添加静态图片
    vim /usr/local/tomcat/webapps/test/index.jsp
    <body>
    <div>动态页面</div>
    <img src="game.jpg"/>   //添加页面图片
    </body>
    
    //nginx服务操作
    2.在nginx服务器上,存放图片,而且图片的目录名称要和tomcat中的java项目名称相同
    vim /usr/local/nginx/conf/nginx.conf
    location ~.*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
    	root html;
    	expires 30d;
    }
    (Tomcat指路径,nginx放图片)
    [root@tomcat01 test]# pwd
    /usr/local/tomcat/webapps/test
    [root@tomcat01 test]# ls
    index.jsp
    [root@nginx test]# ls
    game.jpg
    [root@nginx test]# pwd
    /usr/local/nginx/html/test
    
    注意:目录名称需要和java项目名称相同
    mkdir /usr/local/nginx/html/test
    cp /mnt/game.jpg /usr/local/nginx/html/test
    
    3.重启nginx,测试动静分离页面
    service  nginx restart
    http://192.168.100.140/test/index.jsp
    

    mark

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值