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.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>关闭各节点防火墙及内核保护
bash 复制代码
systemctl stop firewalld
setenforce 0
2>安装Tomcat依赖环境(JAVA运行时)
bash 复制代码
dnf -y install java
3>解压绿色面安装版包
4>移动到合适位置
bash 复制代码
mv apache-tomcat-9.0.8 /usr/local/tomcat
5>将Tomcat服务加入守护进程
bash 复制代码
# 使用 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>重新加载守护进程
bash 复制代码
systemctl daemon-reload
7>启动服务并查看监听
bash 复制代码
systemctl start tomcat

netstat -anpt | grep java
8>创建web目录、编辑测试网页
html 复制代码
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 文件
html 复制代码
<Context docBase="/var/web/webapp1" path="">
</Context>
10>访问测试

Nginx主机实验步骤:

1>、编译安装Nginx
1.1、安装支持软件
bash 复制代码
#关闭防火墙
systemctl stop firewalld

#禁用防火墙
systemctl disable firewalld

#临时关闭内核保护机制
setenforce 0

#永久关闭内核保护机制
vim /etc/sysconfig/selinux

#在配置文件中修改参数为:
SELINUX=disabled
bash 复制代码
#提供编译安装的环境
dnf -y install gcc zlib-devel pcre-devel openssl-devel
1.2、创建程序用户
bash 复制代码
useradd -M -s /sbin/nologin nginx
1.3、编译安装 Nginx
bash 复制代码
#解压
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、检查配置文件
bash 复制代码
nginx -t
2.2、Nginx的启、停
bash 复制代码
#开启
nginx

#关闭
nginx -s stop

#查看状态
netstat -anpt | grep nginx
2.3、添加 Nginx 系统服务
bash 复制代码
#切换目录
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配置文件
bash 复制代码
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 文件
bash 复制代码
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
相关推荐
invicinble9 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat
2301_8187320611 小时前
前端调用控制层接口,进不去,报错415,类型不匹配
java·spring boot·spring·tomcat·intellij-idea
larance15 小时前
Gunicorn + Nginx+systemd 配置flask
nginx·flask·gunicorn
文艺理科生Owen17 小时前
Nginx 路径映射深度解析:从本地开发到生产交付的底层哲学
运维·nginx
程序员敲代码吗17 小时前
Spring Boot与Tomcat整合的内部机制与优化
spring boot·后端·tomcat
kong79069281 天前
Nginx性能优化
java·nginx·性能优化
瑶山1 天前
Spring Cloud微服务搭建五、集成负载均衡,远程调用,熔断降级
spring cloud·微服务·负载均衡·远程调用·熔断降级
主机哥哥1 天前
阿里云OpenClaw部署全攻略,五种方案助你快速部署!
服务器·阿里云·负载均衡
Harvey9031 天前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
全栈工程师修炼指南2 天前
Nginx | stream content 阶段:UDP 协议四层反向代理浅析与实践
运维·网络·网络协议·nginx·udp