5.Nginx+Tomcat负载均衡群集

news2025/6/7 22:48:02

Tomcat服务器应用场景:tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。一般来说,Tomcat虽然和Apache或者Nginx这些Web服务器一样,具有处理HTML页面的功能,然而由于其处理静态HTML的能力远不及Apache或者Nginx,所以Tomcat通常是作为一个Servlet和JSP容器,单独运行在后端。

一.Tomcat的安装部署

1.1实施准备

(1)关闭firewalld防火墙

systemctl stop firewalld

setenforce 0

(2)在安装Tomcat之前必须先安装JDK

JDK的全称是Java Development Kit,是sun公司免费提供的Java语言的软件开发工具包,其中包含Java虚拟机(JVM)。编写好的Java源程序经过编译可形成Java字节码,只要安装了JDK,就可以利用JVM解释这些字节码文件,从而保证了Java的跨平台性。

1.2查看JDK是否安装

java -version

1.3安装配置Tomcat

(1)Tomcat的安装和配置步骤如下:

解压软件包

tar zxvf apache-tomcat-.......

(2)将解压后的文件夹移动到/usr/local下并改名为tomcat

mv apache-tomacat-....  /usr/local/tomcat

(3)启动tomcat

cat/usr/local/tomcat/bin/startup.sh

Tomcat默认运行在8080端口,运行netstat命令查看8080端口监听的net

netstat -anpt | grep 8080

(4)打开浏览器访问测试:http://192.168.10.101:8080/,如果出现如下图,则表示已经启动成功

如果想关闭Tomcat,则运行/usr/local/tomcat/bin/shutdown.sh命令

1.4Tomcat配置相关说明

Tomcat的主目录为/usr/local/tomcat

ll /usr/local/tomcat/

(1)主要目录说明

bin/:存放Windowns或Linux平台上启动和关闭Tomcat的脚本文件

conf/:存放Tomcat服务器的各种全局配置文件,其中最重要的是server.xml和web.xml

lib/:存放Tomcat运行需要的库文件(JARS)

logs/:存放Tomcat执行时的LOG文件

webapps:Tomcat的主要Web发布目录(包括应用程序实例)

work:存放JSP编译后产生的class文件

(2)配置文件说明

catalina.policy:权限控制配置文件

catalina.propertise:Tomcat属性配置文件

context.xml:上下文配置文件

logging.properties:日志log相关配置文件

server.xml:主配置文件

tomcat-users.xml:manager-gui管理用户配置文件

web.xml:Tomcat的servlet、servlet-mapping、filter、MIME等相关配置

2.5Tomcat主配置文件说明

server.xml为Tomcat的主要配置文件,通过此文件开源修改Tomcat的启动端口、网站目录、虚拟主机、开启https等重要功能

整个server.xml由以下结构构成:<Server>、<Service>、<Connector/>、<Engine>、<Host>、<Context>、</Context>、</Host>、</Engine>、</Service>和</Server>。

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
    <Service name="Catalina">
        <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
        <Engine name="Catalina" defaultHost="localhost">
            <Host name="localhost" appBase="webapps"
                  unpackWARs="true" autoDeploy="true">
                <Context path="/myapp" docBase="/path/to/myapp" />
            </Host>
        </Engine>
    </Service>
</Server>
<Server>

• port="8005":指定Tomcat服务器监听的用于接收关闭命令的端口。

• shutdown="SHUTDOWN":设置关闭服务器的命令字符串。

<Connector>

• port="8080":Tomcat监听HTTP请求的端口号。

• protocol="HTTP/1.1":使用的HTTP协议版本。

• connectionTimeout="20000":连接超时时间,单位为毫秒。

• redirectPort="8443":当需要SSL加密连接时,将请求重定向到的端口。

<Engine>

• name="Catalina":引擎的名称。

• defaultHost="localhost":默认的虚拟主机名。

<Host>

• name="localhost":虚拟主机的名称。

• appBase="webapps":Web应用程序的基础目录。

• unpackWARs="true":是否自动解压WAR文件。

• autoDeploy="true":是否自动部署应用程序。

<Context>

• path="/myapp":Web应用的上下文路径。

• docBase="/path/to/myapp":Web应用的实际文件目录。

2.6Tomcat Server的组成部分说明

(1)Server

代表了整个Catalina的servlet容器

(2)Service

Service是这样一个集合:它由一个或者多个Connector,以及一个Engine(负责处理所有Connector所获得的客户请求)组成

(3)Connector

一个Connector在某个指定端口上侦听客户请求,并将获得的请求交给Engine来处理,从Engine处获得回应并返回客户

Tomcat有两个典型的Connector,一个直接侦听来自browser的http请求,一个侦听来自其他WebServer的请求

Coyote Http/1.1 Connector在端口8080处侦听来自客户browser的http请求

Coyote JK2 Connector在端口8009处侦听来自其他webserver的servlet/jsp代理请求

(4)Engine

Enginxe下可以配置多个虚拟主机Virtual Host,每个虚拟主机都有一个域名,当Engine获得一个请求时,他把该请求匹配到某个Host上,然后把该请求交给该Host来处理

Engine有一个默认虚拟主机,当请求无法匹配到任何一个Host上的时候,将交给该默认Host来处理

(5)Host

代表一个Virtual Host,即虚拟主机,每个虚拟主机和某个网络域名Domain Name相匹配

每个虚拟主机下都可以部署一个或者多个Web app,每个web app对应于一个Context,有一个Context path

当Host获得一个请求时,将把该请求匹配到某个Context上,然后把该请求交给该Context来处理,匹配的方法是“最长的匹配”,所以一个path==""的Context将成为Host的默认Context

(6)Context

所有无法和其他Context对应于一个Web Application,一个Web application由一个或者多个Servlet组成

2.7建立Java的Web站点

(1)在根目录下建立一个web目录,并在里面建立一个webapp1目录,用于存放网站文件

mkdir -p /web/webapp1

(2)在webapp1目录下建立一个index.jsp的测试页面

vim /wen/webapp1/index.jsp

(3)修改Tomcat的server.xml文件

定义一个虚拟主机,并将网站文件路径指向已经建立的/web/webapp1,在host段增加context段

vim /usr/local/tomcat/conf/server.xml

   <Context doBase="/web/webapp1"  path=""  reloadable="false"  >

   </Context>

</Host>

(4)关闭Tomcat,再重新启动

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

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

(5)确认web站点

通过浏览器访问http://192.168.10.101:8080/,出现如图所示,说明该Tomcat站点已经配置成功,并且已经能够运行JSP了

显式“静态页面的图片2”文字,并没有出现logo.jpg图片,原因是由于静态图片暂时没配,所以加载不出来

二.案例:Nginx+Tomcat负载均衡、动静分离群集

1.案例分析

1.1案例概述

通常情况下,一台Tomcat 站点由于可能出现单点故障及无法应付过多客户复杂多样的 请求等问题,不能单独应用于生产环境下,所以需要一套更可靠的解决方案来完善 Web 站点 架构。
Nginx 是一款非常优秀的 http 服务器软件,它能够支持高达 50000 个并发连接数的响应,拥有强大的静态资源处理能力,运行稳定,并且内存、CPU等系统资源消耗非常低。目 前很多大型网站都应用 Nginx 服务器作为后端网站程序的反向代理及负载均衡器,来提升整 个站点的负载并发能力。
Nginx 是一个非常强大的静态 web 服务,Tomcat 处理动态请求效率不高,而一般网站大 多数的内容都是静态文件(如图片、html、css、js 等),经过 Nginx 前端的反向代理加速 和过滤,后端Tomcat 处理请求的压力便可大大减少,只需负责处理动态内容就可以了。在 性能与稳定性的权衡下,使用 NginxtTomcat 搭配便可让它们在各自擅长的领域大展拳脚。

1.2案例环境

主机IP地址操作系统应用
Tomcat1服务器

192.168.10.101

openeuler24apache-tomcat
Tomcat2服务器192.168.10.102openeuler24apache-tomcat
Nginx服务器192.168.10.103openeuler24nginx

需求:

a.安装nginx、tomcat

b.nginx、tomcat配置

c、编写动静分离页面

2.案例实施

2.1Tomcat2 server配置

(1)关闭防火墙

(2)确认是否安装 JDK,JAVA 版本与 Tomcatl server 保持一致。

(3)安装配置 Tomcat,版本与 Tomcatl server 保持一致。

(4)创建/web/webapp1 目录,修改 Tomcat 配置文件 server.xml,将网站文件目录更改 到/web/webapp1/路径下。

(5)在/web/webapp1/路径下建立 index.jsp,为了区别将测试页面 index.jsp 的内容更改如下。

vim /web/webapp1/index.jsp

(6)启动 Tomcat,浏览器访问 Tomcat2 server, 测试 http://192.168.10.102:8080/

2.2Nginx服务器配置

在nginx服务器上安装nginx,反向代理到两个Tomcat站点,并实现负载均衡

(1)关闭防火墙

systemctl stop firewalld

setenforce 0

(2)安装相关软件包。

dnf install -y gcc make pcre-devel zlib-devel openssl-devel perl-ExtUtils-MakeMaker

(3)解压并安装 Nginx。

useradd-M-s /sbin/nologin nginx

tar zxf nginx-l.26.3. tar. gz

 cd nginx-l.26.3

./configure  --prefix=/usr/local/nginx  --user=nginx  --group=nginx  --with-http_ssl_module --with-http_v2_module  --with-pcre

make && make install

(4)配置 nginx.conf

vim /usr/local/nginx/conf/nginx.conf

在 http {…}中加入以下代码,设定负载均衡的服务器列表,weight 参数表示权重,权重越高,被分配到的概率越大。为了使测试效果比较明显,我们把权重设置为一样

upstream tomcat server  {

        server 192.168.10.101:8080 weight=1;

        server 192.168.10.102:8080 weight=l;

}

下面是编辑 Nginx 静态页面文件。

 vim /usr/local/nginx/html/index.html

<!DOCTYPE html>
<html>
<head>

<meta http-equiv="content-type"  content="text/html;charset=utf-8”>

<title>静态页面</title>

<style>

body {

width: 35em;

margin:0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;

}

</style>
</head>
<body>
<h1>静态页面</h1>
<p>这是个静态页面</p>
</body>
</html>

//在 http{…}- server{…}中加入 location~.*.jsp${…}动态请求条件规则以及静态图片请求规则。

.......

location ~.*.jsp$ {                          //动态页面正则

      proxy_set_header HOST $host;

      proxy set header X-Real-IP $remote addr;

      proxy set header Client-IP $remote addr;

      proxy set header X-Forwarded-For $proxy add x forwarded for;

      proxy pass http://tomcat server;

}

location ~.*\.(gif jpgljpeg|pnglbmp|swf)$   {                  //静态图片正则

      root /usr/local/nginx/html/img;

      expires 30d;

}

location /  {
      root html;
      index index.html index.htm;

}

......

把 Nginx 的默认站点通过 proxy_pass 方法代理到了设定好的 tomcat_server 负载均衡服务器组上。配置完整的 nginx.conf 文件内容如下。

http  {
…… 
#gzip on;
upstream tomcat_server {
server 192.168.10.101:8080 weight=1;
server 192.168.10.102:8080 weight=1;

}

server {

      listen 80;
      server_name localhost;
      #charset koi8-r;
      #access_log logs/host.access.log main;

      location ~ .*.jsp$ {

            proxy_set_header HOST $host;
            proxy_set_header X-Real-IP $remote_addr,
            proxy_set_header Client-Ip $remote_addr;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_pass http://tomcat_server;

}

location ~ .*\.(gir | jpg | jpeg |png | bmp | swf | css)$ {

      root /usr/local/nginx/html/img;

      expires 30d;

}

location / {
      root html.
      index index.html index.htm;

}

下面在Nginx上准备静态图片

mkdir /usr/local/nginx/html/img //创建静态文件目录

cp /root/logo.jpg /usr/local/nginx/html/img

测试 Nginx 配置文件是否正确。

 /usr/local/nginx/sbin/nginx  -t

启动 Nginx 服务

/usr/local/nginx/sbin/nginx  -c 

查看 Nginx 服务进程

ps aux | grep nginx

nginx 查看端口号及 PID 进程号

netstat -anpt | grep nginx 

2.3测试效果

(1)测试静态页面效果

浏览器访问http://192.168.10.103/,可以看到访问到nginx静态页面

(2)测试负载均衡效果

打开浏览器访问 http://192.168.10.103/index.jsp。不断刷新浏览器测试,可以看到由于权重相同,页面会反复在以下两个页面来回切换。第一次访问,出现 test1 的测试页面,并且能正常加载 nginx 上的静态页面图片,刷新后,第二次访问,出现 test2 的测试页面。

此时负载均衡群集搭建成功,已经可以在两个Tomcat server站点进行切换了

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React项目的状态管理:Redux Toolkit

目录 1、搭建环境 2、Redux Toolkit 包含了什么 3、使用示例 &#xff08;1&#xff09;创建user切片 &#xff08;2&#xff09;合并切片得到store &#xff08;3&#xff09;配置store和使用store 使用js来编写代码&#xff0c;方便理解一些 1、搭建环境 首先&#xf…

跨界破局者鲁力:用思辨与创新重塑汽车流通行业标杆

来源&#xff1a;投资家 在汽车流通行业深度变革的浪潮中&#xff0c;东莞东风南方汽车销售服务有限公司塘厦分公司总经理鲁力历经近二十年行业深耕&#xff0c;构建了一条从汽车销售顾问到区域运营掌舵者的进阶范本。作为东风日产体系内兼具理论建构与实战穿透力的标杆管理者…

OS11.【Linux】vim文本编辑器

目录 1.四种模式 命令模式 几个命令 插入模式 底行模式 一图展示三种模式之间的关系 2.分屏(多文件操作) 3.配置vim的原理 4.脚本一键配置vim CentOS 7 x86_64 其他发行版 5.NeoVim(推荐) vim文本编辑器是一个多模式的编辑器,因此先介绍它的四种模式 附vim的官网:…

基于SFC的windows系统损坏修复程序

前言 在平时使用Windows操作系统时会遇到很多因为系统文件损坏而出现的错误 例如:系统应用无法打开 系统窗口(例如开始菜单)无法使用 电脑蓝屏或者卡死 是如果想要修复很多人只能想到重装系统。但其实Windows有一个内置的系统文件检查器可以修复此类错误。 原理 SFC命令…

WAF绕过,网络层面后门分析,Windows/linux/数据库提权实验

一、WAF绕过文件上传漏洞 win7&#xff1a;10.0.0.168 思路&#xff1a;要想要绕过WAF&#xff0c;第一步是要根据上传的内容找出来被拦截的原因。对于文件上传有三个可以考虑的点&#xff1a;文件后缀名&#xff0c;文件内容&#xff0c;文件类型。 第二步是根据找出来的拦截原…

Vue 3 弹出式计算器组件(源码 + 教程)

&#x1f9ee; Vue 3 弹出式计算器组件&#xff08;源码 教程&#xff09; &#x1f4cc; 建议收藏 点赞 关注&#xff0c;本组件支持加减乘除、双向绑定、计算过程展示&#xff0c;适用于表单辅助输入场景。 &#x1f527; 一、完整源码&#xff08;复制即用&#xff09; …

监测预警系统重塑隧道安全新范式

在崇山峻岭的脉络间延伸的隧道&#xff0c;曾是交通安全的薄弱环节。智慧隧道监测预警系统的诞生&#xff0c;正在彻底改变这种被动防御格局&#xff0c;通过数字神经网络的构建&#xff0c;为地下交通动脉注入智能守护基因。 一、安全防控体系的质变升级 1.风险感知维度革命…

技巧小结:外部总线访问FPGA寄存器

概述 需求&#xff1a;stm32的fsmc总线挂载fpga&#xff0c;stm32需要访问fpga内部寄存器 1、分散加载文件将变量存放到指定地址即FPGA寄存器地址 sct文件指定变量存储地址&#xff0c;从而可以直接访问外设&#xff0c;&#xff08;28335也可以&#xff0c;不过用的是cmd文件…

jenkins集成gitlab发布到远程服务器

jenkins集成gitlab发布到远程服务器 前面我们讲了通过创建maven项目部署在jenkins本地服务器&#xff0c;这次实验我们将部署在远程服务器&#xff0c;再以nginx作为前端项目做一个小小的举例 1、部署nginx服务 [rootweb ~]# docker pull nginx [rootweb ~]# docker images …

当主观认知遇上机器逻辑:减少大模型工程化中的“主观性”模糊

一、人类与机器的认知差异 当自动驾驶汽车遇到紧急情况需要做出选择时&#xff0c;人类的决策往往充满矛盾&#xff1a;有人会优先保护儿童和老人&#xff0c;有人坚持"不主动变道"的操作原则。这种差异背后&#xff0c;体现着人类特有的情感判断与价值选择。而机器的…

会计 - 金融负债和权益工具

一、金融负债和权益工具区分的基本原则 (1)是否存在无条件地避免交付现金或其他金融资产的合同义务 如果企业不能无条件地避免以交付现金或其他金融资产来履行一项合同义务,则该合同义务符合金融负债的义务。 常见的该类合同义务情形包括:- 不能无条件避免的赎回; -强制…

Dify工具插件开发和智能体开发全流程

想象一下&#xff0c;你正在开发一个 AI 聊天机器人&#xff0c;想让它能实时搜索 Google、生成图像&#xff0c;甚至自动规划任务&#xff0c;但手动集成这些功能耗时又复杂。Dify 来了&#xff01;这个开源的 AI 应用平台让你轻松开发工具插件和智能体策略插件&#xff0c;快…

AI书签管理工具开发全记录(十三):TUI基本框架搭建

文章目录 AI书签管理工具开发全记录&#xff08;十三&#xff09;&#xff1a;TUI基本框架搭建前言 &#x1f4dd;1.TUI介绍 &#x1f50d;2. 框架选择 ⚙️3. 功能梳理 &#x1f3af;4. 基础框架搭建⚙️4.1 安装4.2 参数设计4.3 绘制ui4.3.1 设计结构体4.3.2 创建头部4.3.3 创…

初识结构体,整型提升及操作符的属性

目录 一、结构体成员访问操作符1.1 结构体二、操作符的属性&#xff1a;优先级、结合性2.1 优先级2.2 结合性C 运算符优先级 三、表达式求值3.1 整型提升3.2 算数转化 总结 一、结构体成员访问操作符 1.1 结构体 C语言已经提供了内置类型&#xff0c;如&#xff1a;char,shor…

检测到 #include 错误。请更新 includePath。已为此翻译单元(D:\软件\vscode\test.c)禁用波形曲线

原文链接&#xff1a;【VScodeMinGw】安装配置教程 下载mingw64 打开可以看到bin文件夹下是多个.exe文件&#xff0c;gcc.exe地址在环境配置中要用到 原文链接&#xff1a;VSCode中出现“#include错误&#xff0c;请更新includePath“问题&#xff0c;解决方法 重新VScode后…

2025年,百度智能云打响AI落地升维战

如果说从AI到Agent是对于产品落地形态的共识&#xff0c;那么如今百度智能云打响的恰是一个基于Agent进行TO B行业表达的AI生产力升维战。 在这个新的工程体系能力里&#xff0c;除了之前百度Create大会上提出的面向Agent的RAG能力等通用能力模块&#xff0c;对更为专业、个性…

Seed1.5-VL登顶,国产闭源模型弯道超车丨多模态模型5月最新榜单揭晓

随着图像、文本、语音、视频等多模态信息融合能力的持续增强&#xff0c;多模态大模型在感知理解、逻辑推理和内容生成等任务中的综合表现不断提升&#xff0c;正在展现出愈发接近人类的智能水平。多模态能力也正在从底层的感知理解&#xff0c;迈向具备认知、推理、决策能力的…

第3章——SSM整合

一、整合持久层框架MyBatis 1.准备数据库表及数据 创建数据库&#xff1a;springboot 使用IDEA工具自带的mysql插件来完成表的创建和数据的准备&#xff1a; 创建表 表创建成功后&#xff0c;为表准备数据&#xff0c;如下&#xff1a; 2.创建SpringBoot项目 使用脚手架创建…

VTK 显示文字、图片及2D/3D图

1. 基本环境设置 首先确保你已经安装了VTK库&#xff0c;并配置好了C开发环境。 #include <vtkSmartPointer.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h> #include <vtkRenderer.h> 2. 显示文字 2D文字 #include &l…

小白如何在cursor中使用mcp服务——以使用notion的api为例

1. 首先安装node.js,在这一步的时候不要勾选不要勾选 2. 安装完之后,前往notion页面 我的创作者个人资料 | Notion 前往集成页面&#xff0c;添加新集成&#xff0c;自己输入名字&#xff0c;选择内部 新建完之后&#xff0c;进入选择只读 复制密匙 然后前往cursor页面 新建…