一、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 "%r" %s %b" />
5>访问测试
6>查看日志中访问者的IP