Nginx+Tomcat负载均衡群集

发布于:2025-06-21 ⋅ 阅读:(12) ⋅ 点赞:(0)

一、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.104 Windows ——
Tomcat1 服务器 192.168.10.103 OpenEuler24 apache-tomcat-9.0.8
Tomcat2 服务器 192.168.10.102 OpenEuler24 apache-tomcat-9.0.8
Nginx 服务器 192.168.10.101 OpenEuler24 nginx-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 tomcat

netstat -anpt | grep java

8>创建web目录、编辑测试网页
mkdir -p /var/web/webapp1

vim /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.gz

cd 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


网站公告

今日签到

点亮在社区的每一天
去签到