Nginx(4)--Nginx与tomcat反向代理和负载均衡

文章目录

前言

在当前的Web开发与部署场景中,高效、灵活的服务器架构设计是支撑业务稳定运行的关键。Tomcat作为轻量级的Java Web应用服务器,凭借其开源特性、跨平台兼容性以及对Servlet规范的完整实现,成为众多开发者部署动态Web应用的首选。而Nginx以其高性能的反向代理和负载均衡能力,常被用于优化静态资源处理及分发动态请求。两者的结合不仅能够充分发挥各自优势,还能显著提升系统的并发处理能力和可用性。

本实验通过实际环境搭建,演示如何将Nginx与Tomcat协同部署,实现动静分离与负载均衡。内容涵盖Nginx的编译安装、Tomcat的多实例配置、JSP动态页面处理以及Nginx反向代理规则的定制。实验步骤中提供了关键配置文件的修改示例,如server.xml的端口调整、nginx.conf的负载均衡策略定义,并包含测试验证方法。通过此方案,用户可构建一个兼顾性能与扩展性的Web服务架构,适用于生产环境的高并发需求。

Tomcat 介绍

Tomcat 概述

Tomcat 是由 Apache 软件基金会维护的开源轻量级 Web 应用服务器,实现了 Java Servlet、JSP 和 WebSocket 等 Jakarta EE 规范。其核心组件 Catalina 作为 Servlet 容器,专门处理动态 Web 内容。

主要功能

  1. Java Web 应用托管
    支持部署基于 Servlet/JSP/WebSocket 的企业应用,如电商平台、ERP 系统等
  2. HTTP 服务
    可独立提供静态资源(HTML/CSS)和动态请求处理能力
  3. 开发测试平台
    开发者常用作本地调试环境,快速验证 Web 应用

核心优势

  1. 开源免费
    无商业授权费用,适合中小项目
  2. 高效轻量
    低资源消耗,快速启动部署
  3. 跨平台
    基于 Java 开发,支持 Windows/Linux/macOS
  4. 丰富生态
    活跃社区支持,完善文档,轻松集成 Spring/Maven
  5. 模块化架构
    可按需配置功能,如单独使用 Servlet 容器或搭配 Nginx 优化性能

Tomcat+Nginx 整合实验

反向代理方案

nginx+tomcat 组合部署

/usr/local 目录通常存放用户手动安装的软件,区别于系统包管理器安装的应用

步骤1:Nginx 安装

参考Nginx 安装指南

  1. 关闭防火墙和 SELinux
  2. 安装依赖包
  3. 创建专用用户
  4. 源码编译安装
  5. 配置软链接
  6. 编辑 nginx.conf
  7. 配置 systemd 服务文件
  8. 验证服务:systemctl reload/restart nginx
步骤2:JDK 环境配置
  1. 解压 JDK 至 /usr/local
  2. 配置环境变量:
bash 复制代码
vim /etc/profile
# 添加以下内容
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre  
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
export PATH=${JAVA_HOME}/bin:$PATH
  1. 生效配置并验证:
bash 复制代码
source /etc/profile
java -version  # 应显示1.8.0_91版本
步骤3:Tomcat 部署
bash 复制代码
tar zxvf apache-tomcat-8.5.16.tar.gz
mv /opt/apache-tomcat-8.5.16/* /usr/local/tomcat
/usr/local/tomcat/bin/startup.sh
netstat -ntap | grep 8080  # 验证端口

浏览器访问测试:http://[服务器IP]:8080

配置文件修改:

xml 复制代码
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
  <Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true"/>
</Host>
步骤4:JSP 页面配置
jsp 复制代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head><title>JSP test2.1 page</title></head>
<body>
<% out.println("动态页面 2,http://www.test2.com...188-8080");%>
</body>
</html>
步骤5:服务验证
bash 复制代码
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
ps aux | grep tomcat

访问:http://[服务器IP]:8080

扩展:多实例部署

方案1 :新虚拟机重复完整部署流程
方案2:同一主机克隆实例:

bash 复制代码
cp -rp /usr/local/tomcat /usr/local/tomcat1

修改关键配置:

xml 复制代码
<!-- server.xml -->
<Server port="8006" shutdown="SHUTDOWN">
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443"/>
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000"/>
<Context docBase="/usr/local/tomcat1/webapps/test" path="" reloadable="true"/>
负载均衡配置
conf 复制代码
# nginx.conf
upstream tomcatserver {
  server 192.168.80.180:8080 weight=3;
  server 192.168.80.188:8080 weight=1; 
  server 192.168.80.188:8081 weight=1;
}

server {
  location ~ .*\.jsp$ {
    proxy_pass http://tomcatserver;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
  }
  location ~ .*\.(gif|jpg|css)$ {
    root /usr/local/nginx/html/img;
    expires 10d;
  }
}

测试验证

  • 静态资源:http://192.168.80.129/game.png
  • 负载均衡:反复访问 http://192.168.80.129/index.jsp 观察响应分布
相关推荐
百***84452 小时前
SpringBoot(整合MyBatis + MyBatis-Plus + MyBatisX插件使用)
spring boot·tomcat·mybatis
java_logo2 小时前
TOMCAT Docker 容器化部署指南
java·linux·运维·docker·容器·tomcat
麦克马2 小时前
Netty和Tomcat有什么区别
java·tomcat
坚定信念,勇往无前4 小时前
基于rsync,局域网内,无需密码互传
服务器·网络·负载均衡
R.lin6 小时前
浅谈Nginx
运维·nginx
Crazy________7 小时前
37负载均衡介绍和nginx模块编译安装
运维·nginx·负载均衡
百***34138 小时前
Nginx实现接口复制
运维·nginx·junit
天黑请闭眼11 小时前
华为对象存储:nginx代理临时访问地址后访问报错:Authentication Failed
nginx·华为
执念WRD17 小时前
熊海CMS v1.0代码审计实战
android·nginx·安全·web安全·网络安全·系统安全