动静分离+多实例实验(nginx+tomcat)

简单认识nginx+Tomcat多实例部署实现动静分离和负载均衡 nginx使用location去正则匹配用户的访问路径的前缀或者后缀,去判断接收的请求是静态的还是动态的,静态资源请求在Nginx本地进行处理响应,动态页面请求通过反向代理转发给后端应用服务器。在/usr/local/tomcat/tomcat/webapps/test/ 下编写一个简单的jsp页面。在/usr/local/tomcat1/webapps/test/ 下编写一个简单的jsp页面。在/usr/local/tomcat/webapps/test/ 下编写一个简单的jsp页面。 阅读详情

目录

实验前准备

部署Nginx负载均衡器

安装Nginx

部署Tomcat服务器

环境准备

安装Tomcat

Tomcat服务器1配置

修改配置文件server.xml

Tomcat服务器2配置

配置多实例tomcat

测试准备

中间测试

Nginx服务器配置

修改nginx主配置文件

测试

测试静态页面效果

测试动态页面以及负载均衡效果


实验前准备

Nginx服务器:192.168.188.14:80

Tomcat服务器1:192.168.188.11:80

Tomcat服务器2:192.168.188.12:8080   192.168.188.12:8081

部署Nginx负载均衡器

关闭防火墙
systemctl stop firewalld
setenforce 0

安装依赖
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make

安装Nginx

创建用于运行的nginx用户
useradd -M -s /sbin/nologin nginx

解压
cd /opt
tar zxvf nginx-1.22.0.tar.gz

自定义安装设置

cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-file-aio \ #启用文件修改支持
--with-http_stub_status_module \ #启用状态统计
--with-http_gzip_static_module \ #启用 gzip静态压缩
--with-http_flv_module \ #启用 flv模块,提供对 flv 视频的伪流支持
--with-http_ssl_module #启用 SSL模块,提供SSL加密功能
--with-stream #启用 stream模块,提供4层调度

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-stream

编译安装
make && make install

将nginx命令添加到系统命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

将nginx服务添加到系统服务
vim /lib/systemd/system/nginx.service

[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

部署Tomcat服务器

环境准备

关闭防火墙
systemctl stop firewalld
setenforce 0

安装JDK
cd /opt
rpm -ivh jdk-8u201-linux-x64.rpm

设置JDK环境变量
vim /etc/profile.d/java.sh

export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH


source /etc/profile.d/java.sh
检查无误:

安装Tomcat

cd /opt
tar zxvf apache-tomcat-8.5.16.tar.gz
移动并重命名
mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat

注意:如果本机是用作Tomcat服务器2,也就是多实例的服务器,为了后续使用方便,请使用mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat/tomcat1

重启服务
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
检查无误

Tomcat服务器1配置

创建测试的应用目录
mkdir /usr/local/tomcat/webapps/test
写一个页面
vim /usr/local/tomcat/webapps/test/index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>   #指定为 test1 页面
</head>
<body>
<% out.println("动态页面 1,http://www.test1.com");%>
</body>
</html>

修改配置文件server.xml

vim /usr/local/tomcat/conf/server.xml
因为新增的Host的name也是localhost和原本的重名了,所以把原本的删掉

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true">
	</Context>
</Host>

重启服务
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

Tomcat服务器2配置

如果在第2-(4)步安装Tomcat服务器2上的Tomcat时创建了/usr/local/tomcat/tomcat1的话,这一步只需要cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2

配置多实例tomcat

vim /etc/profile.d/tomcat.sh

#tomcat1
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
export CATALINA_BASE1=/usr/local/tomcat/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1

#tomcat2
export CATALINA_HOME2=/usr/local/tomcat/tomcat2
export CATALINA_BASE2=/usr/local/tomcat/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat/tomcat2


source /etc/profile.d/tomcat.sh

修改 tomcat2 中的 server.xml 文件,要求各 tomcat 实例配置不能有重复的端口号

vim /usr/local/tomcat/tomcat2/conf/server.xml
<Server port="8006" shutdown="SHUTDOWN"> #22行,修改Server prot,默认为8005 -> 修改为8006
<Connector port="8081" protocol="HTTP/1.1" #69行,修改Connector port,HTTP/1.1  默认为8080 -> 修改为8081
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" /> #116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8010

修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量
vim /usr/local/tomcat/tomcat1/bin/startup.sh
在对应位置添加

export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1

vim /usr/local/tomcat/tomcat1/bin/shutdown.sh
添加的位置和内容和上面一样

vim /usr/local/tomcat/tomcat2/bin/startup.sh
在对应位置添加

export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2

vim /usr/local/tomcat/tomcat2/bin/shutdown.sh
添加的位置和内容和上面一样

启动各个实例

/usr/local/tomcat/tomcat1/bin/startup.sh
/usr/local/tomcat/tomcat2/bin/startup.sh
查看无误

测试准备

创建两个应用程序
mkdir /usr/local/tomcat/tomcat1/webapps/test
mkdir /usr/local/tomcat/tomcat2/webapps/test

给两个应用程序分别写一个页面
vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>   #指定为 test2 页面
</head>
<body>
<% out.println("动态页面 2,http://www.test2.com");%>
</body>
</html>


vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test3 page</title>   #指定为 test3 页面
</head>
<body>
<% out.println("动态页面 3,http://www.test3.com");%>
</body>
</html>

修改两个实例的主配置文件

vim /usr/local/tomcat/tomcat1/conf/server.xml
这里同样要把之前同名的Host删掉,并添加以下内容

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true" />
</Host>

vim /usr/local/tomcat/tomcat2/conf/server.xml
这里同样要把之前同名的Host删掉,并添加以下内容

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/tomcat2/webapps/test" path="" reloadable="true" />
</Host>

重启两个Tomcat实例
/usr/local/tomcat/tomcat1/bin/shutdown.sh
/usr/local/tomcat/tomcat1/bin/startup.sh

/usr/local/tomcat/tomcat2/bin/shutdown.sh
/usr/local/tomcat/tomcat2/bin/startup.sh

中间测试

这里可以先测试一下,浏览器里查看无误再继续

Nginx服务器配置

准备一个静态页面和静态图片

echo '<html><body><h1>这是静态页面</h1></body></html>' > /usr/local/nginx/html/index.html

mkdir /usr/local/nginx/html/img
再随便塞个图片到/usr/local/nginx/html,随便起个名

修改nginx主配置文件

vim /usr/local/nginx/conf/nginx.conf
详细说一下各项配置的原因

#配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大
	upstream tomcat_server {
		server 192.168.188.11:8080 weight=1;
		server 192.168.188.12:8080 weight=1;
		server 192.168.188.12:8081 weight=1;
	}
	
	server {
		listen 80;
		server_name www.kgc.com;
	
		charset utf-8;
	
		#access_log logs/host.access.log main;
		
		#配置Nginx处理动态页面请求,将 .jsp文件请求转发到Tomcat 服务器处理
		location ~ .*\.jsp$ {
			proxy_pass http://tomcat_server;
#设置后端的Web服务器可以获取远程客户端的真实IP
##设定后端的Web服务器接收到的请求访问的主机名(域名或IP、端口),默认HOST的值为proxy_pass指令设置的主机名。如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来在反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。
			proxy_set_header HOST $host;   
##把$remote_addr赋值给X-Real-IP,来获取源IP
			proxy_set_header X-Real-IP $remote_addr;
##在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		}
		
		#配置Nginx处理静态图片请求
		location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
			root /usr/local/nginx/html/img;
			expires 10d;
		}

重启服务
systemctl restart nginx

测试

测试静态页面效果

页面无误

图片无误

测试动态页面以及负载均衡效果

不断刷新浏览器测试
浏览器访问http://192.168.188.14/index.jsp


Tomcat应用部署及nginx+tomcat实现动静分离项目 一、初识Tomcat; 二、Tomcat与jdk的关系; 三、Tomcat内部工作原理; 四、Tomcat配置文件详解; 五、案例:搭建Tomcat案例; 立即下载

相关推荐

部署Nginx+Apache动静分离的实例详解

Nginx动静分离介绍 Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术 针对PHP的动静分离 静态页面交给Nginx处理 动态页面交给PHP-FPM模块或Apache处理 在Nginx的配置中,是通过location配置段配合正则匹配实现静态与动态页面的不同处理方式 反向代理原理 Nginx不仅能作为Web服务器,还具有反向代理、负载均衡和缓存的功能 Nginx通过proxy模块实现将客户端的请求代理至上游服务器,此时nginx与上游服务器的连接是通过http协议进行的 Nginx在实现反向代理功能时的最重要指令为proxy_ pass,它能

部署web后台的动静分离架构(一)

1、动静分离工作原理 1.由nginx服务器作为调度器,接收客户端的访问请求。 2.nginx分析判断访问请求的头部信息 3.如果访问的页面文件是静态页面文件如html,htm等,则由nginx服务自己处理,并给客户端返回结果。 4.如果访问的页面文件是动态页面文件如php,则由nginx转发给Apache处理,Apache返回结果给nginx服务器,nginx服务器再将结果返回给客户端, 5.如果访问的页面文件是脚本文件如jsp,则由nginx转发给tomcat处理,tomcat返回结果给nginx服务

m0_60655253的博客 606

Nginx动静分离实现案例代码解析

主要介绍了Nginx动静分离实现案例代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

02 | 如何才能做好动静分离?有哪些方案可选?

今天,主要介绍了实现动静分离的几种思路,并由易到难给出了几种架构方案,以及它们各自的优缺点。可以看到,不同的架构方案会引入不同的问题,比如我们把缓存数据从 CDN 上移到用户的浏览器里,针对秒杀这个场景是没问题的,但针对一般的商品可否也这样做呢?你可能会问,存储在浏览器或 CDN 上,有多大区别?我的回答是:区别很大!因为在 CDN 上,我们可以做主动失效,而在用户的浏览器里就更不可控,如果用户不主动刷新的话,你很难主动地把消息推送给用户的浏览器。

qq_37756660的博客 1255

WRF所需气象数据的下载方法

#数据下载是个大问题,巧妇难为无米之炊,没有数据就无法模拟啦,疫情期间国外服务器响应慢,打开网页慢都很正常啦~ WRF数据所需要的外部数据分为两种:静态地理数据,grib格式的气象数据(NAM、GFS、RUC、AGRMET等)。静态地理数据可以从WRF官网获得,比较简单,这里不做介绍。所以这篇日志重点介绍的是气象数据的获取。 提前说明,WRF官网不提供气象数据,但WRF官网提供各类气象数据的下载网址链接,所以我们下载一般还是从WRF官网开始。首先进入WRF官网,然后点击WRF ARW Uusres’ .

六出的博客 1万+

Win10系统内存占用异常飙升?三步排查法快速定位问题根源

本文针对Win10系统内存占用异常飙升问题,提供了一套三步排查法。首先利用任务管理器和资源监视器进行深度系统体检,定位隐形内存消耗者;其次通过干净启动和禁用非必要后台服务,揪出导致内存泄漏的第三方软件或驱动;最后进行终极深度清理,包括检查内存完整性、调整虚拟内存设置以及更新关键驱动程序,帮助用户快速恢复系统流畅运行。

weixin_29251567的博客 195

nginx+Tomcat实现负载均衡、动静分离集群部署

通过学习理解反向代理和负载均衡的原理及其如何实战配置。

m0_58076958的博客 1608

《AI应用架构师智能特征工程实践的前沿趋势解读》

面对传统方法的局限性,智能特征工程(Intelligent Feature Engineering)应运而生。智能特征工程是指利用人工智能、机器学习和自动化技术,实现特征提取、构造、选择和优化过程的自动化、智能化和可扩展化的方法和技术体系。效率提升:将数据科学家从繁琐的人工特征工程中解放出来,大幅缩短特征开发周期。质量保障:通过系统化方法发现人类难以察觉的特征模式,提高特征质量和模型性能。可扩展性:能够处理大规模、高维度和多类型的数据,适应不同领域和场景。降低门槛。

大数据洞察的博客 1181

Nginx+Tomcat实现动静分离

什么是动静分离 动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路 动静分离简单的概括是:动态文件与静态文件的分离。 总结:静态资源一个服务器(css、img、js)、动态资源一个服务器(后端代码)。 为什么要使用动静分离 在我们的软件开发中,有些请求是需要后台处理的(如...

xiaoming 582

FSL软件安装

FSL软件安装

huang_tianyuan的博客 2630

计量经济学tempdisagg的python库:年度时序变月度

计量经济学tempdisagg的python库:年度时序变月度

素质云笔记 1528

五、Nginx动静分离实例

一、Nginx动静分离 Nginx动静分离简单来说就是把动态和静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。可以理解成使用Nginx处理静态页面,Tomcat处理动态页面。 动静分离从目前实现角度来讲大致分为两种: 纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案 动态跟静态文件混合在一起发布,通过 nginx 来分开 效果图 原理 通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使 浏览器缓存过期时间,减少与

qq_17405183的博客 1314

读懂 ABAP CDS 注解的直接、继承与派生

本文系统梳理了ABAP CDS注解的评估逻辑,重点解析直接注解(Direct)、继承注解(Inherited)和派生注解(Derived)的差异及其在CL_DD_DDL_ANNOTATION_SERVICE中的处理方式。通过视图注解@Metadata.ignorePropagatedAnnotations可调控注解传播行为,避免下游语义影响上层视图。文章还提供了基于标准表的完整示例(包含底层视图、消费视图和ABAP报告程序),帮助开发者在实际系统中验证三层注解的叠加效果与阻断机制。关键点包括:派生注解的数据

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 245

Tomcat服务部署、优化及多实例实验(Nginx+Tomcat负载均衡、动静分离)

1 Tomcat 1.1 tomcat 构成 1.2 什么是 servlet? 1.3 什么是 JSP? 1.4 Tomcat 功能组件结构 1.5 Container 结构分析 1.6Tomcat 请求过程 2 Tomcat 服务部署 2.1 环境部署 2.1.1 ​编辑 2.1.2 设置JDK环境变量 2.2 安装启动Tomcat 2.3优化tomcat启动速度 2.4主要目录说明 3 Tomcat 虚拟主机配置 3.1 创建 cyw和 cww 项目目录和文件

2302_78835233的博客 952

100天精通Python(基础篇)——第2天:基础语法详解(标识符、保留字、注释与代码结构)

100天精通Python(基础篇)——第2天:基础语法详解(标识符、保留字、注释与代码结构)

努力让自己发光,对的人才能迎着光而来 34万+

【LAMMPS学习】五、LAMMPS命令(1) LAMMPS 输入脚本

本部分描述了 LAMMPS 输入脚本的格式以及其中的命令如何用于定义 LAMMPS 模拟。主要包括以下内容。

荷塘阅色 2644

Tomcat多实例部署及Nginx和Tomcat动静分离+负载均衡实验

1.部署Tomcat多实例 2.部署Nginx 负载均衡 3.部署Tomcat负载均衡

kid00013的博客 371

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Tomcat多实例和负载均衡

Tomcat多实例和负载均衡

shanjun12的博客 401

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

TOMCAT的多实例部署和动静分离

nginx 反向代理 -----负载均衡---------tomcat是后端服务器-----web静态nginx------静态请求------>nginx-------动态页面------tomacat。因为omcat是属于轻量级的应用服务器,tomcat并发量能力弱,只有nginx的六分之一,nginx+tomcat的负载均衡和动静分离。简略可以理解为:分别可以对静态页面和动态页面发起不同的请求。一台nginx,两台tomact(其中一台tomcat做多实例部署)tomcat的多实例 动静分离。

m0_56509725的博客 772

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Nginx+Tomcat负载均衡、动静分离

但是不是把所有的web请求转发,而是将静态页面请求Ncinx服务器自己来处理,动态页面请求,转发给后端的Tomcat服务器来处理。每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题,但是ip_hash会造成负载不均,有的服务请求接受多,有的服务请求接受少,所以不建议采用ip_hash模式,session 共享问题可用后端服务的 session 共享代替 nginx 的 ip_hash(使用后端服务器自身通过相关机制保持session同步)。

weixin_67300995的博客 1365

Tomcat多实例与负载均衡

①. 关闭防火墙systemctl stop firewalld systemctl disable firewalld setenforce 0 ②. #将安装 Tomcat 所需软件包传到/opt目录下 apache-tomcat-9.0.16.tar.gz jdk-8u201-linux-x64.rpm ③. #切换至/opt下,安装jdk cd /opt rpm -ivh jdk-8u201-linux-x64.rpm ​ ④. #查看java版本 java -version cd /opt tar

weixin_44841019的博客 704

Nginx和Tomcat负载均衡、动静分离

目录一、Tomcat多实例1、安装JDK1.2、安装 tomcat 1.3、配置jdk环境变量 1.4、修改tomcat1中的主配置文件1.5、 配置 tomcat 环境变量1.6、修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量1.7、启动tomcat并查看 1.8.浏览器访问测试 二、Nginx+Tomcat负载均衡、动静分离1.1、Nginx实现负载均衡原理1.2、Nginx静态处理优势1.3、Nginx动静分离原理三、实验环境配置1

weixin_56270746的博客 938

「 Nginx+Tomcat负载均衡、动静分离」

Nginx 静态处理优势:Nginx 处理静态页面的效率远高于 Tomcat 的处理能力若 Tomcat 的请求量为1000次,则 Nginx 的请求量为6000次Tomcat 每秒的吞吐量为0.6M,Nginx 的每秒吞吐量为3.6MNginx 处理静态资源的能力是 Tomcat 处理的6倍。<Connector port="8081" protocol="HTTP/1.1" #69行,修改Connector port,HTTP/1.1 默认为8080 -> 修改为8081。

xyjmh的博客 98
上一篇: 负载均衡集群 LVS
下一篇: LVS-NAT实验
唐十洪
博客等级 码龄6年 440粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值