Nginx+Tomcat负载均衡

news2025/6/5 23:53:54

目录

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下写我们自己的location

        location ~ .*\.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下写我们自己的location

        location ~ .*\.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.coloradmin.cn/o/2398069.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【论文解读】ReAct:从思考脱离行动, 到行动反馈思考

认识从实践开始&#xff0c;经过实践得到了理论的认识&#xff0c;还须再回到实践去。 ——《实践论》,毛泽东 1st author: About – Shunyu Yao – 姚顺雨 paper [2210.03629] ReAct: Synergizing Reasoning and Acting in Language ModelsReAct: Synergizing Reasoning and…

简单配置RHEL9.X

切换默认运行级别 将系统默认启动模式从多用户的图形界面调整为多用户的文本界面&#xff0c;适用于优化系统资源占用或进行远程服务器管理的场景。 注意&#xff1a;安装选择“带GUI的服务器”部分常用命令默认安装&#xff1b;如果选择“最小安装”时&#xff0c;部分常用命…

下载并运行自制RAG框架

项目部署 https://github.com/huangjia2019/rag-project01-framework git clone https://github.com/huangjia2019/rag-project01-framework.git 一 、 前端分部分部署 在 Ubuntu 系统 上安装 Node.js 和 npm&#xff08;Node Package Manager&#xff09;&#xff0c;并初始…

Rust 学习笔记:Cargo 工作区

Rust 学习笔记&#xff1a;Cargo 工作区 Rust 学习笔记&#xff1a;Cargo 工作区创建工作区在工作区中创建第二个包依赖于工作区中的外部包向工作区添加测试将工作区中的 crate 发布到 crates.io添加 add_two crate 到工作区总结 Rust 学习笔记&#xff1a;Cargo 工作区 随着项…

颈部的 “异常坚持”

生活中&#xff0c;有些人的颈部会突然变得 “异常坚持”—— 头部不受控制地偏向一侧&#xff0c;或是不自主地旋转、后仰&#xff0c;仿佛被无形的力量牵引着。这种情况不仅影响外观&#xff0c;还会带来强烈的不适感&#xff0c;颈部肌肉紧绷、酸痛&#xff0c;像被一根绳索…

Ubuntu22.04安装MinkowskiEngine

MinkowskiEngine简介 Minkowski引擎是一个用于稀疏张量的自动微分库。它支持所有标准神经网络层&#xff0c;例如对稀疏张量的卷积、池化和广播操作。 MinkowskiEngine安装 官方源码链接&#xff1a;GitHub - NVIDIA/MinkowskiEngine: Minkowski Engine is an auto-diff neu…

【计算机网络】第2章:应用层—应用层协议原理

目录 1. 网络应用的体系结构 2. 客户-服务器&#xff08;C/S&#xff09;体系结构 3. 对等体&#xff08;P2P&#xff09;体系结构 4. C/S 和 P2P 体系结构的混合体 Napster 即时通信 5. 进程通信 6. 分布式进程通信需要解决的问题 7. 问题1&#xff1a;对进程进行编址…

【Zephyr 系列 6】使用 Zephyr + BLE 打造蓝牙广播与连接系统(STEVAL-IDB011V1 实战)

🧠关键词:Zephyr、BLE、广播、连接、GATT、低功耗蓝牙、STEVAL-IDB011V1 📌适合人群:希望基于 Zephyr 实现 BLE 通信的嵌入式工程师、蓝牙产品开发人员 🧭 前言:为什么选择 Zephyr 开发 BLE? 在传统 BLE 开发中,我们大多依赖于厂商 SDK(如 Nordic SDK、BlueNRG SD…

利用 Scrapy 构建高效网页爬虫:框架解析与实战流程

目录 前言1 Scrapy 框架概述1.1 Scrapy 的核心优势1.2 Scrapy 的典型应用场景 2 Scrapy 工作原理解析2.1 框架结构图2.2 Spider&#xff1a;定义数据采集策略2.3 Scheduler&#xff1a;调度请求与去重2.4 Downloader&#xff1a;网页下载器2.5 Item&#xff1a;结构化数据容器2…

RPG20.创建敌人的初始能力和加载武器

1. 基于StartUpAbilitiy基类创建专门用于敌人数据的DAStartUpABility&#xff0c;然后再基于新创建的DA再创建一个蓝图 2.打开 DataAsset_EnemyStartUpData.h // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "Cor…

自适应移动平均(Adaptive Moving Average, AMA)

文章目录 1. 考夫曼自适应移动平均 (KAMA)算法推导及Python实现2. 对 (KAMA)算法参数进行优化及实现 自适应移动平均&#xff08;Adaptive Moving Average, AMA&#xff09;由Perry Kaufman在其著作《Trading Systems and Methods》中提出&#xff0c;它通过动态调整平滑系数来…

涨薪技术|0到1学会性能测试第95课-全链路脚本开发实例

至此关于系统资源监控、apache监控调优、Tomcat监控调优、JVM调优、Mysql调优、前端监控调优、接口性能监控调优的知识已分享完,今天学习全链路脚本开发知识。后续文章都会系统分享干货,带大家从0到1学会性能测试。 前面章节介绍了如何封装.h头文件,现在通过一个实例来介绍…

Spring AI Alibaba + Nacos 动态 MCP Server 代理方案

作者&#xff1a;刘宏宇&#xff0c;Spring AI Alibaba Contributor 文章概览 Spring AI Alibaba MCP 可基于 Nacos 提供的 MCP server registry 信息&#xff0c;建立一个中间代理层 Java 应用&#xff0c;将 Nacos 中注册的服务信息转换成 MCP 协议的服务器信息&#xff0c…

MCP:让AI工具协作变得像聊天一样简单 [特殊字符]

想象一下,你正在处理一个项目,需要从A平台查看团队讨论,从B平台获取客户信息,还要在GitHub上检查代码进度。传统做法是什么?打开三个不同的网页,在各个平台间来回切换,复制粘贴数据,最后还可能因为信息分散而遗漏重要细节。 听起来很熟悉?这正是当前工作流程的痛点所…

AI炼丹日志-27 - Anubis 通过 PoW工作量证明的反爬虫组件 上手指南 原理解析

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇&#xff1a; MyBatis 更新完毕目前开始更新 Spring&#xff0c;一起深入浅出&#xff01; 大数据篇 300&#xff1a; Hadoop&…

阿姆达尔定律的演进:古斯塔夫森定律

前言 在上一篇文章《使用阿姆达尔定律来提升效率》中提到的阿姆达尔定律前提是假设问题的规模保持不变&#xff0c;并且给定一台速度更快的机器&#xff0c;目标是更快地解决问题。然而&#xff0c;在大多数情况下&#xff0c;这并不完全正确。当有一台更快的机器时&#xff0…

JavaScript极致性能优化全攻略

JavaScript性能优化深度指南 1 引言 JavaScript性能优化在现代Web开发中至关重要。随着Web应用日益复杂,性能直接影响用户体验、搜索引擎排名和业务转化率。研究表明,页面加载时间每增加1秒,转化率下降7%,跳出率增加32%。通过优化JavaScript性能,开发者可以: 提升用户满…

Transformer核心原理

简介 在人工智能技术飞速发展的今天&#xff0c;Transformer模型凭借其强大的序列处理能力和自注意力机制&#xff0c;成为自然语言处理、计算机视觉、语音识别等领域的核心技术。本文将从基础理论出发&#xff0c;结合企业级开发实践&#xff0c;深入解析Transformer模型的原…

Grafana-State timeline状态时间线

显示随时间推移的状态变化 状态区域&#xff1a;即状态时间线上的状态显示的条或带&#xff0c;区域长度表示状态持续时间或频率 数据格式要求&#xff08;可视化效果最佳&#xff09;&#xff1a; 时间戳实体名称&#xff08;即&#xff1a;正在监控的目标对应名称&#xf…

解决CSDN等网站访问不了的问题

原文网址&#xff1a;解决CSDN等网站访问不了的问题-CSDN博客 简介 本文介绍解决CSDN等网站访问不了的方法。 问题描述 CSDN访问不了了&#xff0c;页面是空的。 问题解决 方案1&#xff1a;修改DNS 可能是dns的问题&#xff0c;需要重新配置。 国内常用的dns是&#x…