Nginx+Tomcat实现动静分离

文章目录

  • 一.动静分离的原理及架构
    • 1.1 动静分离是什么?
    • 1.2 动静分离的原理
    • 1.3 动静分离的架构组成
  • 二.Nginx+Tomcat实现动静分离
    • 2.1实验环境
    • 2.2所需软件环境
    • 2.3nginx服务的实现
    • 2.4配置动静分离

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

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@mufeng101 static]# ls         #a rookie.jpg图片通过xshell工具从windows本机上传至static目录
mufeng.png  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动静分离

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/413642.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android 15的新功能介绍

虽然谷歌已经发布了 Android 15 Preview 1&#xff0c;但这并不是完整的更新&#xff0c;因为该公司计划在后续的每月测试版中引入新功能。但这可能会让您思考&#xff0c;“Android 15 带来了哪些新功能&#xff1f;” 为了寻找答案&#xff0c;让我们深入了解 Android 15。 …

pr2024 Premiere Pro 2024 mac v24.2.1中文激活版

Premiere Pro 2024 for Mac是Adobe公司推出的一款强大的视频编辑软件&#xff0c;专为Mac操作系统优化。它提供了丰富的剪辑工具、特效和音频处理选项&#xff0c;帮助用户轻松创建专业级的影视作品。 软件下载&#xff1a;pr2024 Premiere Pro 2024 mac v24.2.1中文激活版 无论…

Linux yum安装pgsql出现Bad GPG signature错误

官方文档&#xff1a;https://www.postgresql.org/download/linux/redhat/ sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install -y postgresql12-server sudo /usr/pgsql-12/bin/…

【架构笔记1】剃刀思维-如无必要,勿增实体

欢迎来到文思源想的架构空间&#xff0c;前段时间博主做了一个工作经历复盘&#xff0c;10年开发路&#xff0c;走了不少弯路&#xff0c;也算积累了不少软件开发、架构设计的经验和心得&#xff0c;确实有必要好好盘一盘&#xff0c;作为个人的总结&#xff0c;同时也留给有缘…

【QT+QGIS跨平台编译】之五十四:【QGIS_CORE跨平台编译】—【qgssqlstatementlexer.cpp生成】

文章目录 一、Flex二、生成来源三、构建过程一、Flex Flex (fast lexical analyser generator) 是 Lex 的另一个替代品。它经常和自由软件 Bison 语法分析器生成器 一起使用。Flex 最初由 Vern Paxson 于 1987 年用 C 语言写成。 “flex 是一个生成扫描器的工具,能够识别文本中…

leetcode:134.加油站

解题思路&#xff1a;需要注意开始时的编号&#xff0c;有的可以走一圈&#xff0c;有的走不了 模拟过程&#xff1a;for循环主要是用来模拟线性的过程&#xff0c;而在这里它是环状的&#xff1b; 可以用暴力解法&#xff0c;但是在这里我用贪心来解决。 常见疑惑&#xff1…

阿里云国际云解析DNS如何开启/关闭流量分析?

流量分析服务会涉及产生日志费用&#xff0c;所以开通内网DNS解析服务后&#xff0c;默认不会主动开启流量分析&#xff0c;需要您手动开启流量分析。对于未开启流量分析的用户&#xff0c;进入界面会提示您展示的都是模拟数据&#xff0c;您可以点击开启流量分析服务&#xff…

nvm下载node指定版本后npm不存在

一&#xff0c;项目背景 接手一个老的项目&#xff0c;需要使用旧的node版本&#xff0c;使用nvm下载12.11.0版本后发现npm命令不存在。 二&#xff0c;原因 查找资料发现是8.11以上版本的node版本对应的npm都没法自动安装&#xff0c;需要自己到npm官网( https://registry.…

《TCP/IP详解 卷一》第9章 广播和本地组播

目录 9.1 引言 9.2 广播 9.2.1 使用广播地址 9.2.2 发送广播数据报 9.3 组播 9.3.1 将组播IP地址转换为组播MAC地址 9.3.2 例子 9.3.3 发送组播数据报 9.3.4 接收组播数据报 9.3.5 主机地址过滤 9.4 IGMP协议和MLD协议 9.4.1 组成员的IGMP和MLD处理 9.4.2 组播路由…

Linux--查看网络性能指标

一、性能指标有哪些&#xff1f; 带宽&#xff0c;表示链路的最大传输速率&#xff0c;单位是 b/s &#xff08;比特 / 秒&#xff09;&#xff0c;带宽越大&#xff0c;其传输能力就越强。延时&#xff0c;表示请求数据包发送后&#xff0c;收到对端响应&#xff0c;所需要的…

【iOS ARKit】网络传输 ARWorldMap

ARKit 可以利用 ARWorldMap 在应用中断后进行状态恢复、继续AR 进程。一个用户也可以将ARWorldMap 发送给其他用户&#xff0c;当其他用户接收并加载 ARWorldMap 后&#xff0c;就可以在相同的物理环境看到同样的虚拟元素&#xff0c;达到共享 AR体验的目的。 在ARKit 中&#…

【c语言】内存函数

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 memcpy函数的使用和模拟实现 memcpy函数的使用 memcpy函数的模拟实现 memmove的使用和模拟实现 memmove的使用 memmove的模拟实现 memset函数的使用 memcmp函数…

java中容器继承体系

首先上图 源码解析 打开Collection接口源码&#xff0c;能够看到Collection接口是继承了Iterable接口。 public interface Collection<E> extends Iterable<E> { /** * ...... */ } 以下是Iterable接口源码及注释 /** * Implementing this inte…

【UE 材质】水晶材质

效果 步骤 1. 先在Quixel Bridge上下载冰纹理 2. 新建一个材质&#xff0c;这里命名为“M_Ice”并打开&#xff0c;添加如下纹理采样节点 继续添加如下节点 此时效果如下&#xff1a; 可以看到此时的材质颜色比较浅&#xff0c;如果希望颜色深一点可以继续添加如下节点 此时效…

Java学习--学生管理系统(残破版)

代码 Main.java import java.util.ArrayList; import java.util.Scanner;public class Main {public static void main(String[] args) {ArrayList<Student> list new ArrayList<>();loop:while (true) {System.out.println("-----欢迎来到阿宝院校学生管理系…

OSI模型

OSI模型 TCP/IP参考模型 TCP/IP常见协议 应用层 FTP&#xff08;用于文件的下载和上传&#xff0c;采用C/S结构&#xff09; Telnet&#xff08;用于远程登陆服务&#xff09; DNS&#xff08;域名解析&#xff09; HTTP&#xff08;接收和发布Html页面&#xff09; 传输层…

React Switch用法及手写Switch实现

问&#xff1a;如果注册的路由特别多&#xff0c;找到一个匹配项以后还会一直往下找&#xff0c;我们想让react找到一个匹配项以后不再继续了&#xff0c;怎么处理&#xff1f;答&#xff1a;<Switch>独特之处在于它只绘制子元素中第一个匹配的路由元素。 如果没有<Sw…

Vue项目构建优化

本文作者为 360 奇舞团前端开发工程师 宁航 在开发大型前端项目时&#xff0c;往往是一个需求对应一个分支&#xff0c;当完成需求后&#xff0c;就需要将代码打包、部署。代码通常需要部署到多个环境中&#xff0c;这些环境包括&#xff1a;日常环境、测试环境、回归环境和生产…

Linux Centos7配置SSH免密登录

Linux Centos7配置SSH免密登录 配置SSH免密登录说明&#xff1a; 分两步 第一步、给Server A生成密钥对 第二步、给Server B授权 生成密钥对之后&#xff0c;我们可以看看它保存的目录下的文件。 接下来我们就要把Server A&#xff08;10.1.1.74&#xff09;的公钥拷贝到Se…

Linux运维-Web服务器的配置与管理(Apache+tomcat)(没成功,最后有失败经验)

Web服务器的配置与管理(Apachetomcat) 项目场景 公司业务经过长期发展&#xff0c;有了很大突破&#xff0c;已经实现盈利&#xff0c;现公司要求加强技术架构应用功能和安全性以及开始向企业应用、移动APP等领域延伸&#xff0c;此时原来开发web服务的php语言已经不适应新的…