Nginx+Tomcat实现动静分离

一.动静分离的原理及架构

1.1 动静分离是什么?

动静分离(Separation of Concerns)是一种常见的Web架构设计模式,通过将动态内容(如Java应用程序、PHP脚本等)和静态内容(如HTML文件、图片、CSS、JavaScript等)分开处理,可以提高网站的性能和可伸缩性。在实现动静分离时,通常会使用Nginx作为反向代理服务器,将请求分发到不同的后端服务器上。

1.2 动静分离的原理

  • 服务端接收来自客户端的请求中。既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源Nginx转发至后端。

原理图如下:
在这里插入图片描述
在这里插入图片描述

1.3 动静分离的架构组成

  • Nginx 很少处理动态页面,说起来,它其实是一个基于多路复用模型构建的产品,常用来高性能HTTP和反向代理服务器,在运行的过程汇总占用较低的内存,可以支持更多的并发连接。
  • nginx处理静态资源是tomcat的6倍
  • Tomcat是一个Jsp/Servlet容器服务器,在最新的Tomcat版本中,支持epoll模型,如果要处理动态应用,比如java的动态应用,肯定是首选,但Tomcat处理静态请求能力就比较弱。

所以 Nginx与Tomcat的整合正好结合了两者的优点,在企业级生产环境应用中,这种组合去实现动静分离也非常常见。

二.Nginx+Tomcat实现动静分离

2.1实验环境

本次实验所用版本介绍:

CentOS7.9,jdk-11.0.22,nginx-1.20.1,tomcat-10.1.19

本次实验所用主机:

hostname          ip             port
nginx         10.0.0.103.         80
tomcat1       10.0.0.102         8080
tomcat2       10.0.0.104         8080

2.2所需软件环境

[root@tomcat1 ~]# java -version                                             #检查java版本
openjdk version "11.0.22" 2024-01-16 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.22.0.7-1.el7_9) (build 11.0.22+7-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.22.0.7-1.el7_9) (build 11.0.22+7-LTS, mixed mode,
sharing)

systemctl stop firewalld.service           #停止防火墙服务
systemctl disable firewalld.service        #关闭防火墙服务  
setenforce 0                               #设置selinux模式为不可用

关于jdk的安装可参考这篇博文:https://blog.csdn.net/zhanghongshun624/article/details/128245144

注意: 在tomcat1和tomcat2两台服务器都需要安装jdk和tomcat

2.3nginx服务的实现

10.0.0.103为nginx服务器,本文采用yum安装的方式
nginx的其它安装方法可参考这篇博文:https://blog.csdn.net/zhanghongshun624/article/details/128107565

  • 安装nginx
[root@nginx ~]# yum install  -y nginx

[root@nginx ~]# systemctl daemon-reload         
[root@nginx ~]# systemctl start nginx.service                  #启动nginx                
[root@nginx ~]# systemctl enable nginx.service                 #设置nginx开机启动
[root@nginx ~]# ps -ef|grep nginx                              #检查nginx运行进程

2.4配置动静分离

nginx服务器设置静态页面:

1.在Ngnix服务器后台创建用于静态页面目录static,并在其中添加静态测试页面:

[root@nginx ~]# mkdir /usr/local/nginx/html/static
[root@nginx ~]# cd /usr/local/nginx/html/static
[root@nginx static]# vim test.html
<html>
<body>
 <h1>这是a rookie的页面</h1>
 <img src="a rookie.jpg"/>
</body>
</html>
[root@nginx static]# ls         #a rookie.jpg图片通过xshell工具从windows本机上传至static目录
a rookie.jpg  test.html

2.在tomcat1、tomcat2服务器上分别创建动态目录test,在目录中各自创建一个动态页面:

mkdir -p /usr/local/tomcat/webapps/test/

[root@tomcat1 ~]# vim /usr/local/tomcat/webapps/test/index.jsp        #编辑动态jsp文件
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("这是第一个页面");%>
</body>
</html>
[root@tomcat2 ~]# vim /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("这是第二个页面");%>
</body>
</html>

修改server.xml文件中的Context和appBase

[root@tomcat1 ~]# vim /usr/local/tomcat/apache-tomcat-10.1.19/conf/server.xml
[root@tomcat2 ~]# vim /usr/local/tomcat/apache-tomcat-10.1.19/conf/server.xml

在这里插入图片描述
3.配置nginx配置文件

  • upstream模块用于设置后端服务器的服务池和负载均衡策略,以提供响应数据。
  • location模块用于设置正则表达式对用户发起的URL进行匹配,也就是实现动静分离的功能

更多nginx配置文件模块可参考这篇博文:https://blog.csdn.net/zhanghongshun624/article/details/128212937

[root@nginx ~]# vim /etc/nginx/nginx.conf
      upstream tomcatserver {                       #制定负载均衡器名字为tomcatserver
       server 10.0.0.102:8080 weight=1;             #通过8080提供web服务,配置权重(默认轮询)
       server 10.0.0.104:8080 weight=1;             #通过8080提供web服务,配置权重(默认轮询)
  }
  server {
        listen       80;                            #监听端口80
        server_name  localhost;                     #默认本机地址
        charset 'utf-8';                            #使用utf-8字符集

    location ~* .*\.jsp$ {                          #正则表达式匹配动态页面
    proxy_pass    http://tomcatserver;              #反向代理服务域名
    proxy_redirect off;                             #当上游服务器返回响应式重定向或者刷新时
    proxy_set_header Host $host;                    #设置由后端服务器获取用户主机名、真实IP地址以及代理者的真实IP地址
    proxy_set_header X-Real-IP $remote_addr;        #只添加客户端IP到请求报文头部,转发至后端服务器
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #添加客户端IP和反向代理服务器IP到请求报文头部
    }
    location ~ .*\.(jpg|jpeg|png|htm|html|css)$ {   #正则表达式匹配静态文件
    root /usr/local/nginx/html/static/;             #指定静态文件
    expires 1d;                                     #指定1天的延期时间
    }
}

4.重启服务

[root@tomcat1/2 bin]# /usr/local/tomcat/bin/shutdown.sh       #停止tomcat进程
[root@tomcat1/2 bin]# /usr/local/tomcat/bin/startup.sh        #重启tomcat进程

[root@nginx ~]# systemctl restart nginx

5.访问测试
首先验证静态页面,用户只需要访问Nginx服务器地址,两台Tomcat服务器对用户是透明的,在浏览器输入访问地址http://10.0.0.103/test.html,发现静态页面已经由Nginx服务器提供静态解析并反馈浏览器显示如下:
在这里插入图片描述

验证动态页面,在浏览器输入访问地址http://10.0.0.103/index.jsp,发现动态页面已经由Nginx服务器提供动态解析,并且随着用户对页面的访问刷新,按照轮询负载均衡策略,交替显示“第一个页面”与“第二个页面”,如下所示:
在这里插入图片描述
在这里插入图片描述
以上就是本篇的全部内容,实现了Nginx+Tomcat动静分离

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值