Nginx+Tomcat负载均衡群集

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

1、Tomcat 简介

名称由来:Tomcat 最初由 Sun 的软件构架师詹姆斯・邓肯・戴维森开发,后变为开源项目并由 Sun 贡献给 Apache 软件基金会。因 O’Reilly 开源项目常以动物命名相关书籍,他希望动物能自我照料,故命名为 Tomcat(公猫 ),O’Reilly 相关书籍封面及 Tomcat 的 Logo 兼吉祥物也设计成公猫形象 。且 Tomcat 早期叫 Catalina,安装后路径下有很多和 Catalina 相关、对使用或配置 Tomcat 重要的目录和文件。

2、应用场景

Tomcat 服务器是免费开源代码的 Web 应用服务器,属轻量级,在中小型系统、并发访问用户不多场景普遍使用,是开发和调试 JSP 程序首选。它虽和 Apache、Nginx 一样可处理 HTML 页面,但处理静态 HTML 能力不及后两者,通常作为 Servlet 和 JSP 容器单独运行在后端 

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

3.1、实验拓扑

3.2、案例环境

主机IP 地址操作系统应用
客户端192.168.10.104Windows——
Tomcat1 服务器192.168.10.103OpenEuler24apache-tomcat-9.0.8
Tomcat2 服务器192.168.10.102OpenEuler24apache-tomcat-9.0.8
Nginx 服务器192.168.10.101OpenEuler24nginx-1.26.3

Tomcat主机实验步骤:

1>关闭各节点防火墙及内核保护
systemctl stop firewalld
setenforce 0

2>安装Tomcat依赖环境(JAVA运行时)
dnf -y install java

3>解压绿色面安装版包

4>移动到合适位置
mv apache-tomcat-9.0.8 /usr/local/tomcat

5>将Tomcat服务加入守护进程
# 使用 vim 编辑 tomcat.service 服务单元文件,该文件用于 systemd 管理 Tomcat 服务
vim /lib/systemd/system/tomcat.service# [Unit] 部分:定义服务的基本描述、依赖关系等元数据
[Unit]
# Description:对服务的简短描述,说明这是 Apache Tomcat Web 服务器
Description=Apache Tomcat Web Server
# After:指定该服务在哪个系统目标(target)之后启动,这里表示在网络服务(network.target)就绪后再启动 Tomcat,
# 确保 Tomcat 启动时网络可用,避免因网络未就绪导致服务异常
After=network.target# [Service] 部分:定义服务的具体运行、控制逻辑
[Service]
# ExecStart:服务启动时执行的命令,调用 Tomcat 安装目录下 bin 目录里的 catalina.sh 脚本,以 run 参数启动 Tomcat 进程,
# 让 Tomcat 以前台运行模式(适配 systemd 管理)持续提供服务
ExecStart=/usr/local/tomcat/bin/catalina.sh run
# ExecStop:服务停止时执行的命令,调用 catalina.sh 脚本的 stop 参数,优雅停止 Tomcat 服务
ExecStop=/usr/local/tomcat/bin/catalina.sh stop
# Restart=on-failure:设置重启策略,当服务因非正常退出(如崩溃、错误等导致的失败)时,自动重启服务
Restart=on-failure
# RestartSec=5s:重启服务前等待的时间,这里是等待 5 秒后再尝试重启,避免频繁重启对系统造成过大压力
RestartSec=5s# [Install] 部分:定义服务的安装相关配置,即服务启用后要关联到哪个系统目标
[Install]
# WantedBy=multi-user.target:表示该服务启用(systemctl enable)后,会被关联到 multi-user.target 这个系统目标,
# 当系统进入多用户模式(常规的命令行、服务器运行模式)时,自动启动该 Tomcat 服务 
WantedBy=multi-user.target

6>重新加载守护进程
systemctl daemon-reload
7>启动服务并查看监听
systemctl start tomcatnetstat -anpt | grep java

8>创建web目录、编辑测试网页
mkdir -p /var/web/webapp1vim /var/web/webapp1/index.jsp###编辑内容###<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head><title>JSP test2 page</title>
</head>
<body><% out.println("动态页面 1,http://www.test1.com");%>
</body>
<body><div>动态页面的图片 1</div><br><img src="logo.png">
</body>
</html><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head><title>JSP test2 page</title>  
</head>
<body><% out.println("动态页面 2,http://www.test2.com");%>
</body>
<body><div>动态页面的图片 2</div><br><img src="logo.jpg">
</body>
</html>

9>修改Tomcat的server.xml 文件
<Context docBase="/var/web/webapp1" path="">
</Context>

10>访问测试

Nginx主机实验步骤:

 1>、编译安装Nginx
1.1、安装支持软件
#关闭防火墙
systemctl stop firewalld#禁用防火墙
systemctl disable firewalld#临时关闭内核保护机制
setenforce 0#永久关闭内核保护机制
vim /etc/sysconfig/selinux#在配置文件中修改参数为:
SELINUX=disabled

#提供编译安装的环境
dnf -y install gcc zlib-devel pcre-devel openssl-devel
1.2、创建程序用户
useradd -M -s /sbin/nologin nginx

1.3、编译安装 Nginx
#解压
tar zxf nginx-1.26.3_http_proxy.tar.gzcd nginx-1.26.3#配置
./configure --prefix=/usr/local/nginx \
--user=nginx \
--group=nginx  \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--add-module=./ngx_http_proxy_connect_module#编译
make#编译安装
make install#做软连接
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin

2>、Nginx 的运行控制
2.1、检查配置文件
nginx -t

2.2、Nginx的启、停
#开启
nginx#关闭
nginx -s stop#查看状态
netstat -anpt | grep nginx

2.3、添加 Nginx 系统服务
#切换目录
cd /lib/systemd/system#编辑服务文件
vim nginx.service#编写内容:
[Unit]
Description=cyauhiojpkl67tfyjop0k[ldrtuyfgiuvjnko
After=network.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/sbin/nginx
ExecStop=/usr/sbin/nginx -s stop
ExecReload=/usr/local/sbin/nginx -s reload[Install]
WantedBy=multi-user.targe

备注:
fork 其实本身就是一个进程。
当执行 Execstart 启动 nginx 进程的时候,fork 进程自身以 daemon 模式运行,将 nginx作为一个子进程,并启动起来这个 nginx 的子进程。然后 fork 父进程退出。并将 fork 出的 nginx 子进程作为服务主进程进行跟踪

3>编辑Nginx配置文件
vim /usr/local/nginx/conf/nginx.conf###编辑内容###
upstream aaa {server 192.168.10.102:8080 weight 1;
server 192.168.10.103:8080 weight 2;}location ~ .*\.jsp$ {proxy_pass http://aaa;proxy_set_header HOST $host;proxy_set_header Client-IP $remote_addr;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}location ~ .*\.(png|gpg|gpeg|gif) {root html/img;index index.html;}

4>修改Tomcat的server.xml 文件
vim /usr/local/tomcat/conf/server.xml###编辑内容###<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="{X-Real-IP}i %h %l %u %t &quot;%r&quot; %s %b" />

5>访问测试

6>查看日志中访问者的IP

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

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

相关文章

Linux下nginx访问路径页面

第一步&#xff1a;通过Xshell在虚拟机中下载nginx sudo apt-get install nginx 第二步&#xff1a;进入nginx配置页面 cd /etc/nginx 我这里创建了一个html文件夹 在进入去创建页面并且重新加载 boahuboahu-VMware-Virtual-Platform:/$ cd /etc/nginx boahuboahu-VMware-Vir…

python实战项目76:51job数据采集与分析

python实战项目76:51job数据采集与分析 一、数据采集二、数据预处理2.1 导入相关库、读取数据2.2 查看数据2.3 处理数据、删除重复值、删除空值2.4 处理薪资水平字段数据三、数据可视化3.1 不同公司规模招聘岗位数量分布3.2 不同公司性质招聘岗位数量分布3.3 不同年限要求招聘岗…

OPENGLPG第九版学习 - 纹理与帧缓存 part1

文章目录 6.1 纹理综述6.2 基木纹理类型6.3 创建并初始化纹理代理纹理 6.4 指定纹理数据6.4.1 显式设置纹理数据将静态数据载入到纹理对象 6.4.2 从缓存(目标对象GL_PIXEL_UNPACK_BUFFER)中加载纹理6.4.3 从文件加载图像(DDS为例)读取一个图像文件并返回内存中的纹素数据将纹素…

Redis 持久化机制详解:RDB、AOF 原理与面试最佳实践(AOF篇)

在上一章我们深入学习了 Redis 中重要的数据持久化机制 ——RDB&#xff08;Redis Database&#xff09;&#xff0c;了解了其通过周期性快照将数据以二进制文件形式保存到磁盘的原理&#xff0c;包括触发条件、文件结构以及优缺点等核心内容。 Redis 持久化机制详解&#xff…

NumPy数组操作详解

在现代数据科学与工程计算领域&#xff0c;高效的数组操作是实现复杂算法的基础。NumPy作为Python的核心科学计算库&#xff0c;提供了一套强大的多维数组对象及操作机制。本文深入探讨NumPy数组的各种操作&#xff0c;旨在帮助读者全面掌握其功能与应用场景。 数组创建与属性查…

ER图:数据库设计的可视化语言 - 搞懂数据关系的基石

在数据库设计和数据建模领域&#xff0c;ER图&#xff08;实体-关系图&#xff09; 绝对是最基础、最核心的可视化工具之一。它用最直观的方式描绘了现实世界中的数据及其关系&#xff0c;是构建可靠数据库的蓝图。今天&#xff0c;我们就来聊聊这个技术基石。 本文来自「大千A…

图像特征检测算法ORB

ORB&#xff08;Oriented FAST and Rotated BRIEF&#xff09;是一种在计算机视觉领域广泛应用的特征检测与描述算法。 算法原理 特征点检测 &#xff1a;ORB 算法结合了 FAST&#xff08;Features from Accelerated Segment Test&#xff09;特征点检测方法和 Harris 特征点检…

docker 目录更改,必须做数据迁移才能启动

要修改 Docker 镜像的存储位置 并迁移数据&#xff08;如从 /var/lib/docker 迁移到 /mnt/data/docker&#xff09;&#xff0c;需要以下步骤&#xff1a; 1. 停止 Docker 服务 在修改配置和迁移数据前&#xff0c;先停止 Docker 服务&#xff1a; sudo systemctl stop docke…

springboot入门之路(一)

文章目录 1.Spring Boot介绍2.开发你的第一个Spring Boot应用2.1创建POM2.2yml和properties的配置区别yml配置properties配置 2.3springbootDemo代码2.4创建一个可执行jar 参考文档&#xff1a;SpringBoot参考指南&#xff1b;SpringBoot实战 1.Spring Boot介绍 Spring Boot使…

设计模式之责任链模式

责任链模式是一种经典的设计模式&#xff0c;属于行为型设计模式&#xff0c;他的核心思想是&#xff1a;将请求的发起者与接受者进行解耦&#xff0c;让多个对象都有机会处理请求&#xff0c;从而避免了请求发送者与接受者之间的耦合关系。这些对象连接形成一条链&#xff0c;…

使用YOLO模型进行线程安全推理

概述 在多线程环境中运行YOLO 模型时需要特别注意线程安全问题。Python threading 模块允许同时运行多个线程&#xff0c;但在这些线程中使用YOLO 模型时&#xff0c;需要注意一些重要的安全问题。 Python 线程是一种并行计算形式&#xff0c;允许程序同时运行多个操作。不过…

对抗性提示:进阶守护大语言模型

人工智能模型正快速进化 —— 变得更具帮助性、更流畅&#xff0c;并且更深入地融入我们的日常生活和商业运营中。但随着其能力的提升&#xff0c;风险也在增加。在维护安全可信的人工智能方面&#xff0c;最紧迫的挑战之一是对抗性提示&#xff1a;这是一种微妙且通常富有创意…