当前位置: 首页 > article >正文

Nginx+Tomcat负载均衡

目录

Tomcat简介

Tomcat 的核心功能

Tomcat架构

 Tomcat 的特点

Tomact配置

关闭防火墙及系统内核

Tomcar 主要文件信息

配置文件说明

案例一:Java的Web站点

案例二:Nginx+Tomcat负载均衡、动静分离


Tomcat简介

Tomcat 是由 Apache 软件基金会(ASF)开发的一款开源的 Servlet 容器 和 Web 服务器,主要用于运行基于 Java 的 Web 应用程序(如 JSP、Servlet)。它实现了 Java Servlet、JavaServer Pages(JSP)、Java Expression Language(EL)和 WebSocket 等 Java EE 规范,是轻量级、高性能的 Java Web 应用服务器,广泛应用于开发和生产环境。

Tomcat 的核心功能

  1. Servlet 容器
    1. 解析和执行 Java Servlet 代码,处理 HTTP 请求和响应。
    2. 管理 Servlet 的生命周期(初始化、服务、销毁)。
  2. JSP 引擎
    • 将 JSP 文件动态编译为 Servlet,生成 HTML 响应。
  3. 静态资源服务
    • 支持直接提供 HTML、CSS、JavaScript、图片等静态文件。
  4. 会话管理
    • 提供 HttpSession 接口,支持用户会话跟踪。
  5. 安全与认证
    • 支持基于角色的访问控制(RBAC)、SSL/TLS 加密等。
  6. 集群与负载均衡
    • 通过插件支持多节点部署,实现高可用性。

Tomcat架构

 Tomcat 采用模块化设计,主要组件包括:

组件作用
Server顶层容器,代表整个 Tomcat 实例。
Service连接 Connector 和 Engine,提供服务(如 HTTP、AJP)。
Connector处理客户端连接(如 HTTP 请求),将请求转发给 Engine
Engine处理请求的核心组件,管理多个 Host(虚拟主机)。
Host虚拟主机,如 localhost,管理多个 Context(Web 应用)。
Context单个 Web 应用(如 /myapp),对应一个 WAR 文件或目录。

 Tomcat 的特点

  1. 轻量级
    • 相比 WebLogic、WebSphere 等商业服务器,Tomcat 体积小、启动快。
  2. 开源免费
    • 遵循 Apache 许可证,无商业使用限制。
  3. 跨平台
    • 支持 Windows、Linux、macOS 等操作系统。
  4. 易于集成
    • 可与 Spring Boot、Struts 等框架无缝集成。
  5. 社区活跃
    • 长期维护,版本更新频繁,支持最新 Java 特性

Tomact配置

关闭防火墙及系统内核

[root@localhost ~]# systemctl stop firewalld    #关闭防火墙
[root@localhost ~]# setenforce 0                #关闭系统内核

在安装Tomcat之前需要安装Tomcat依赖环境

[root@localhost ~]# dnf -y install java

将Tomcat的安装包压缩(压缩就能用 绿色安装)

[root@localhost ~]# tar zxf apache-tomcat-9.0.8.tar.gz 

 移动至别的目录并重置名字

[root@localhost ~]# mv apache-tomcat-9.0.8 /usr/local/tomcat

Tomcar 主要文件信息

  •  bin/:存放 Windows 或 Linux 平台上启动和关闭 Tomcat 的脚本文件。
  • conf/: 存放 Tomcat 服务器的各种全局配置文件,其中最重要的是 server.xml 和web. xml.
  • lib/:存放 Tomcat 运行需要的库文件(JARS)
  • -logs:存放 Tomcat 执行时的 LOG 文件
  • -webapps:Tomcat 的主要 Web 发布目录(包括应用程序示例)
  • work:存放 JSP 编译后产生的 class 文件。

配置文件说明

  •  catalina.policy:权限控制配置文件。
  • catalina.properties:Tomcat 属性配置文件。
  • context.xml:上下文配置文件。
  • logging.properties: 日志 log 相关配置文件。
  • server.xml:主配置文件。
  • tomcat-users.xml:manager-gui管理用户配置文件(Tomcat 安装后提供-个 manager-gui 的管理界面,通过配置该文件可以开启访问)。
  • web.xml:Tomcat 的 servlet、servlet-mapping、filter、MIME 等相关配置。

启动Tomcat

[root@localhost ~]# /usr/local/tomcat/bin/startup.sh    #启动
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh    #关闭

检测是否运行

[root@localhost ~]# netstat -anpt |grep java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      2387/java           
tcp6       0      0 :::8080                 :::*                    LISTEN      2387/java           
tcp6       0      0 :::8009                 :::*                    LISTEN      2387/java

 验证测试网页

案例一:Java的Web站点

关闭防火墙及系统内核

[root@localhost webapp1]# systemctl stop firewalld
[root@localhost webapp1]# setenforce 0

 在安装Tomcat之前需要安装Tomcat依赖环境

[root@localhost ~]# dnf -y install java

将Tomcat的安装包压缩(压缩就能用 绿色安装)

[root@localhost ~]# tar zxf apache-tomcat-9.0.8.tar.gz 

 移动至别的目录并重置名字

[root@localhost ~]# mv apache-tomcat-9.0.8 /usr/local/tomcat

创建测试页面区分两个网站

[root@localhost bin]# mkdir -p /web/webapp1
[root@localhost bin]# cd /web/webapp1/
[root@localhost bin]# vim index.jsp
02
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
<html>   
<head><title>JSP test1 page</title>   </head><body><% out.println("动态页面 1,http://www.test1.com");%></body> <body> <div>动态页面的图片 1</div><br><img src="logo.png"> </body> 
</html>两个网站 
03
<%@ 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.png"> </body> 
</html>

修改Tomcat配置文件

[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml
忽略以上所有信息
148行
<Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true"><Context docBase="/web/webapp1" path="" />        #只添加这一行

 关闭Tomcat在启动

[root@localhost ~]# /usr/local/tomcat/bin/startup.sh    #启动
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh    #关闭

102验证

 

103验证

 

可以看到的是并没有图片

案例二:Nginx+Tomcat负载均衡、动静分离

跟案例一操作基本上是一样的,只是配置不一样 这里不再演示如何安装Nginx

101Nginx 102Tomcat1 103Tomcat2

修改Nginx配置文件

忽略以上信息
添加真实服务器的ip、端口、权重 
#gzip  on;upstream my_tomcat{server 192.168.10.102:8080 weight=1;server 192.168.10.103:8080 weight=2;}
忽略以下信息server {listen       80;server_name  localhost;charset utf-8;            #在server中开启utf-8,要不然会乱码#access_log  logs/host.access.log  main;在location下写我们自己的locationlocation ~ .*\.jsp$ {proxy_set_header HOST $host;#proxy_set_header Client-IP $remote_addr;                        #这三条是之后,查看日志信息的时候查看真实IP访问Tomcat服务器的#proxy_set_header X-Real-IP $remote_addr;#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://my_tomcat;}location ~ .*\.(gif|jpg|png)$ {root /usr/local/nginx/html/img;expires 30d;}

配置完后 检查配置是否有误

[root@localhost ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

重启

[root@localhost img]# systemctl restart nginx

验证:

 

 因为网站2的权重比一高,所以3次刷新网站二会显示较多

后续查看日志并不能看到真实的ip访问Tomcat

需要给上面的配置#号去掉

 

忽略以上信息
添加真实服务器的ip、端口、权重 
#gzip  on;upstream my_tomcat{server 192.168.10.102:8080 weight=1;server 192.168.10.103:8080 weight=2;}
忽略以下信息server {listen       80;server_name  localhost;charset utf-8;            #在server中开启utf-8,要不然会乱码#access_log  logs/host.access.log  main;在location下写我们自己的locationlocation ~ .*\.jsp$ {proxy_set_header HOST $host;proxy_set_header Client-IP $remote_addr;                        #这三条是之后,查看日志信息的时候查看真实IP访问Tomcat服务器的proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://my_tomcat;}location ~ .*\.(gif|jpg|png)$ {root /usr/local/nginx/html/img;expires 30d;}

 

 配置完后 检查配置是否有误

[root@localhost ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

重启

[root@localhost img]# systemctl restart nginx

修改Tomcat文件

[root@localhost ~]# 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" />    #只有%{X-Real-IP}i 需要添加

访问nginx刷新并查看Tomcat日志信息

 

 

 

 

 

 

 

 

http://www.lryc.cn/news/2398069.html

相关文章:

  • JVM——JVM中的字节码:解码Java跨平台的核心引擎
  • 【论文解读】ReAct:从思考脱离行动, 到行动反馈思考
  • 数据解析:一文掌握Python库 lxml 的详细使用(处理XML和HTML的高性能库)
  • react native webview加载本地HTML,解决iOS无法加载成功问题
  • 简单配置RHEL9.X
  • 默认网关 -- 负责转发数据包到其他网络的设备(通常是路由器)
  • python调用硅基流动的视觉语言模型
  • 下载并运行自制RAG框架
  • Rust 学习笔记:Cargo 工作区
  • 颈部的 “异常坚持”
  • Ubuntu22.04安装MinkowskiEngine
  • 【计算机网络】第2章:应用层—应用层协议原理
  • 【Zephyr 系列 6】使用 Zephyr + BLE 打造蓝牙广播与连接系统(STEVAL-IDB011V1 实战)
  • 利用 Scrapy 构建高效网页爬虫:框架解析与实战流程
  • RPG20.创建敌人的初始能力和加载武器
  • P5684 [CSP-J2019 江西] 非回文串 题解
  • 自适应移动平均(Adaptive Moving Average, AMA)
  • Java密码加密存储算法,SpringBoot 实现密码安全存储
  • 使用 Version Catalogs统一配置版本 (Gradle 7.0+ 特性)
  • 涨薪技术|0到1学会性能测试第95课-全链路脚本开发实例
  • C++文件和流基础
  • Spring AI Alibaba + Nacos 动态 MCP Server 代理方案
  • MCP:让AI工具协作变得像聊天一样简单 [特殊字符]
  • C++ Learning string类模拟实现
  • Message=“HalconDotNet.HHandleBase”的类型初始值设定项引发异常
  • AI炼丹日志-27 - Anubis 通过 PoW工作量证明的反爬虫组件 上手指南 原理解析
  • 阿姆达尔定律的演进:古斯塔夫森定律
  • JavaScript极致性能优化全攻略
  • 批量大数据并发处理中的内存安全与高效调度设计(以Qt为例)
  • Transformer核心原理