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 观察响应分布
相关推荐
闲云一鹤1 天前
nginx 快速入门教程 - 写给前端的你
前端·nginx·前端工程化
何中应4 天前
Nginx转发请求错误
前端·后端·nginx
大大水瓶5 天前
Tomcat
java·tomcat
芝士雪豹只抽瑞克五5 天前
Nginx 高性能Web服务器笔记
服务器·nginx
失重外太空啦5 天前
Tomcat
java·服务器·tomcat
屎到临头想搅便5 天前
TOMCAT
java·tomcat
失重外太空啦5 天前
nginx
运维·nginx
大大水瓶5 天前
HAProxy 从入门到实战:负载均衡与流量管理全解析
运维·负载均衡
微风起皱5 天前
企业级WEB应用服务器TOMCAT
java·前端·tomcat