Apache Tomcat与反向代理

在这里插入图片描述
Apache Tomcat 是一个开源的 Java Servlet 容器,主要用于部署和运行基于 Java 的 Web 应用程序。Tomcat 提供了一个环境,让开发者能够使用 Java 编写的 Web 应用程序在 Web 服务器上运行。下面是对 Tomcat 的详细介绍:

Tomcat 的历史

  • Tomcat 最初是由 James Duncan Davidson 在 Sun Microsystems 开发的。
  • 随着 Java 社区的发展,Tomcat 成为了 Apache Software Foundation 下的一个项目,并由 Apache 软件基金会维护。
  • Tomcat 最初是为了支持 Java Servlet 规范而创建的,随着 Java EE 平台的发展,Tomcat 也逐渐支持了更多的 Java EE 规范,如 JSP (Java Server Pages) 和部分 EJB (Enterprise JavaBeans)。

Tomcat 的主要功能

  1. Servlet 容器:Tomcat 提供了一个符合 Servlet 规范的环境,支持 Java Servlets 的执行。
  2. JSP 引擎:除了 Servlets 之外,Tomcat 还内建了对 JSP 的支持,能够将 JSP 页面转换为 Servlets 并执行。
  3. HTTP 服务器:虽然 Tomcat 主要作为一个 Servlet 容器,但它也包含了一个轻量级的 HTTP 服务器,用于接收 HTTP 请求并将它们传递给 Servlet 容器处理。
  4. 安全性和认证:Tomcat 提供了基本的安全机制,包括用户认证和授权,以保护 Web 应用程序。
  5. 管理工具:Tomcat 自带一套管理工具,允许管理员远程管理和监控 Tomcat 服务器的状态。

Tomcat 的架构

  • Catalina:这是 Tomcat 的核心组件,实现了 Servlet 容器的功能。
  • Connector:负责处理与客户端的通信,包括 HTTP 和 AJP 协议。
  • Host Manager:用于管理不同的虚拟主机和上下文。
  • Manager:提供了 Web 界面和命令行界面,用于管理部署的应用程序和其他设置。

Tomcat 的版本

  • Tomcat 有不同的版本,每个版本对应于不同的 Java EE 规范版本。例如,Tomcat 8 对应 Java EE 7,而 Tomcat 9 对应 Java EE 8。
  • Tomcat 10 和更高版本开始支持 Jakarta EE 规范,因为 Java EE 名称已经改为 Jakarta EE。

Tomcat 的安装和配置

  • 下载:从官方网站下载最新的 Tomcat 发布版。
  • 解压:将下载的文件解压到一个目录中。
  • 配置:编辑 conf/server.xml 和其他配置文件来调整 Tomcat 的设置。
  • 启动和停止:通过 bin/startup.shbin/shutdown.sh 脚本来启动和停止 Tomcat。

Tomcat 的使用场景

  • 开发环境:由于其简单性和易用性,Tomcat 经常被用作开发环境中的 Servlet 容器。
  • 小型到中型项目:对于不需要全部 Java EE 特性的项目,Tomcat 提供了一个轻量级的选择。
  • 云环境:Tomcat 可以轻松地部署在云端,用于扩展和缩放应用程序。

Tomcat 的限制

  • 不支持全部 Java EE 规范:虽然 Tomcat 支持 Servlet 和 JSP,但并不完全支持所有的 Java EE 规范,如 JMS 和 EJB。
  • 安全性有限:相比于全面的企业级应用服务器,Tomcat 的内置安全特性较为有限。

Tomcat实例

安装Tomcat

推荐从apache官网下载源码包安装启动

[root@tomcat ~]# yum install java-1.8.0-openjdk.x86_64 -y
#安装java环境

安装并启动Tomcat

[root@tomcat ~]# tar zxf apache-tomcat-9.0.91.tar.gz -C /usr/local/
[root@tomcat ~]# ln -s /usr/local/apache-tomcat-9.0.91/ /usr/local/tomcat
[root@tomcat ~]# /usr/local/tomcat/bin/startup.sh

查看端口

[root@tomcat ~]# netstat -antlupe | grep java
tcp6 0 0 :::8080 :::* LISTEN 0
68636 32887/java

访问Tomcat
在这里插入图片描述

tomcat的文件结构与组成

目录结构

目录 说明
bin 服务启动、停止等相关程序和文件
conf 配置文件
lib 库目录
logs 日志目录
webapps 应用程序,应用部署目录,相当于nginx的默>认发布目录
work jsp 编译后的结果文件,建议提前预热访问

查看tomcat相关目录与文件

[root@tomcat ~]# ls /usr/local/tomcat/
bin conf lib logs README.md RUNNING.txt
webapps
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work

生成tomcat启动文件

[root@tomcat ~]# vim /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/etc/alternatives/jre_openjdk
[root@tomcat ~]# vim /lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat
#After=syslog.target network.target remote-fs.target nss-lookup.target
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/usr/local/tomcat/conf/tomcat.conf
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
[root@tomcat ~]# systemctl daemon-reload
[root@tomcat ~]# systemctl enable --now tomcat

Tomcat反向代理部署

在这里插入图片描述

  • standalone模式,Tomcat单独运行,直接接受用户的请求,不推荐。
  • 反向代理,单机运行,提供了一个Nginx作为反向代理,可以做到静态由nginx提供响应,动态jsp代
    理给Tomcat
    LNMT:Linux + Nginx + MySQL + Tomcat
    LAMT:Linux + Apache(Httpd)+ MySQL + Tomcat
  • 前置一台Nginx,给多台Tomcat实例做反向代理和负载均衡调度,Tomcat上部署的纯动态页面更
    适合
    LNMT:Linux + Nginx + MySQL + Tomcat
  • 多级代理
    LNNMT:Linux + Nginx + Nginx + MySQL + Tomcat

利用nginx反向代理功能,实现图中的代理功能,将用户请求全部转发至指定的同一个tomcat主机
利用nginx指令proxy_pass 可以向后端服务器转发请求报文,并且在转发时会保留客户端的请求报文中的
host首部
在这里插入图片描述

[root@Nginx ~]# vim /usr/local/nginx/conf.d/vhosts.conf
location ~ \.jsp$ {
proxy_pass http://172.25.254.10:8080;
}
实现tomcat负载均衡

动态服务器的问题,往往就是并发能力太弱,往往需要多台动态服务器一起提供服务。如何把并发的压
力分摊,这就需要调度,采用一定的调度策略,将请求分发给不同的服务器,这就是Load Balance负载
均衡。
当单机Tomcat,演化出多机多级部署的时候,一个问题便凸显出来,这就是Session。而这个问题的由
来,都是由于HTTP协议在设计之初没有想到未来的发展

tomcat负载均衡配置

[root@Nginx ~]# vim /usr/local/nginx/conf.d/vhosts.conf
upstream tomcat {
ip_bash;
#hash $cookie_JSESSIONID;
server 172.25.254.10:8080;
server 172.25.254.20:8080;
}
server {
listen 80;
server_name www.example.org;
root /webdataw/nginx/example.org/lee;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
try_files $uri $uri.html $uri/index.html /error/default.html;
location ~ \.jsp$ {
proxy_pass http://tomcat;
}
}

测试示例:
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/409978.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity 中使用SQLite数据库

文章目录 0.参考文章1.Presentation —— 介绍2.(SQLite4Unity3d)Unity中直接使用SQLite的插件3.创建数据库4.创建表5.Navicat Premium(数据库可视化)6.增删改查6.1 增6.2 删6.3 改6.4 查 0.参考文章 https://blog.csdn.net/Chin…

干货 | 关于Armv7m异常进入的经验分享

一、 概述 这里主要介绍异常的进入行为(不包括复位异常)。(这里主要参考 armv7m)。 二、异常进入 在发生抢占的时候(异常发生且开始执行),硬件将上下文状态保存到一个 SP 寄存器指向的栈中&a…

优化|贝叶斯优化系列(二):大规模贝叶斯优化算法

原文:When Gaussian Process Meets Big Data: A Reviewof Scalable GPs 原文作者:Haitao Liu , Yew-Soon Ong 论文解读者:赵进 编者按 高斯过程模型因其出色的预测性能在仿真建模中得到了广泛应用,然而在当今大数据时代&#xf…

百度翻译与TOP3在线翻译伙伴:2024年的黄金组合

在这个信息丰富的时代,语言帮助人们跨越地域界限进行交流。随着全球化的发展,高效的在线翻译工具变得越来越重要,它能帮我们更好地了解世界和不同的文化。今天,我们就来看看百度翻译和它的三个新对手之间的比较,一起找…

Codeforces Round 916 (Div. 3) E1. Game with Marbles(博弈论*1400)

感觉很难想。 如果你直接想的话,你就会发现有很多做法可以选择,而你根本不知道应该选哪个。 这时候可以先假设鲍勃已经取走了爱丽丝的所有的颜色的弹珠,(并且以每个颜色一个弹珠的代价)。 这时候每一项得分就是 S i …

Dubbo 内置容器:Spring Container

Dubbo 内置容器:Spring Container 1、核心点2、误解澄清 💖The Begin💖点点关注,收藏不迷路💖 Dubbo本身并不直接提供容器服务,而是深度集成了Spring框架,实现了对Spring Container的全面支持。…

游戏开发设计模式之原型模式

目录 原型模式的实现步骤 原型模式的优点 原型模式的应用场景 总结 原型模式在游戏开发中的具体应用案例是什么? 如何在不同编程语言中实现原型模式? Java C# Python C JavaScript 原型模式与其他创建型设计模式(如建造者模式、适…

Modern restaurant - building and interior (餐厅场景)

餐厅是模块化的,因此您可以使用提供的构造元素(如墙壁模块、地板模块、窗户、吧台、厨房模块、门、天花板模块等)进一步设计自己的餐厅。 图像和视频中显示的完整场景包含在此资源包中,可以用作游戏和3D项目的起点! ★ 主要特点 ★ 全模块化内饰和外观 全模块化厨房和餐厅…

PTA统计一行文本的单词个数

本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。 输入格式: 输入给出一行字符。 输出格式: 在一行中输出单词个数。 输入样例: Lets go to room 209.输出样例: 5解题…

【惠农网-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

Backtrader 实现和理解海龟交易法

Backtrader 实现和理解海龟交易法 1. 海龟交易的理解 (1)资金管理 海龟将总资金分为N个交易单位,每个单位即称为头寸,划分的标准主要是参考标的的波动性。 波动性用一个指标量化即真实波动幅度均值(ATR)…

C_05_编译4阶段

c语言编译的4个阶段:预处理、 编译、 汇编、 链接 预处理阶段会在源代码中查找预编译指令,其中主要是头文件展开(include),宏定义(defind),选择性编译(ifdef)三种指令 预…

mybatis-plus添加replace(自定义)方法,添加sql注入器SqlInjector

1. 继承DefaultSqlInjector import com.baomidou.mybatisplus.core.injector.AbstractMethod; import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector; import com.baomidou.mybatisplus.core.metadata.TableInfo; import org.springframework.stereotype.Compon…

Qt_信号槽机制

文章目录 Qt中的信号槽机制1.在widget.h添加处理函数的声明2.添加处理函数的定义3.建立信号和槽的连接4.运行 Qt中的信号槽机制 本质就是给按钮的点击操作,关联上一个处理函数,当用户点击的时候,就会执行这个处理函数。 函数:stat…

Upscayl 采用开源人工智能技术,可以增强低分辨率图像的效果。

Upscayl 是一款免费开源的基于 AI 神经网络与深度学习的「图片画质提升 / 超分辨率软件」,可以做到“无损放大图片”,让你轻松将任意分辨率的图片、照片、壁纸放大到高清、超清甚至 4K 水平,大幅提升图片细节表现与清晰度!效果比起…

用Python实现时间序列模型实战——Day 2: 时间序列的基本统计量

一、学习内容 1. 自相关函数 (ACF) 与偏自相关函数 (PACF) 自相关函数 (ACF): 自相关函数用于衡量时间序列在不同时间滞后下的相关性。它描述了序列与自身滞后版本之间的相关性,滞后时间越长,相关性通常会减弱。自相关函数的计算公式为&am…

浏览器 V8 引擎

V8 引擎是 Google 开发的高性能 JavaScript 和 WebAssembly 引擎,最初是为了提升 Google Chrome 浏览器的性能而设计的。自 2008 年首次发布以来,V8 引擎不仅仅被用在 Chrome 浏览器中,还被广泛应用于其他 JavaScript 环境中,比如…

嵌入式系统课后习题(带答案)

资料截图(部分): 🚀 获取更多详细资料可点击链接进群领取,谢谢支持👇 点击免费领取更多资料

前端通过draggable结合fabricjs实现拖拽至画布生成元素自定义编排功能

前端通过draggable结合fabricjs实现拖拽自定义编排功能 太久没有更新了,主要最近行情不太好失业了一段时间,一度到怀疑人生,然后就是做的东西大多没有什么含金量,没什么好分享的就很尴尬。 刚好最近遇到一个奇葩的需求&#xff0…

【李林880-2025版本】个人错题01 第十六章节——喻老讲解版

十六章 这里需要注意的是三个设的变量都要满足的不等式条件 根据题目的最长中间的一段需要满足大于其他两个变量的不等式条件 最后根据几何概型方法求出概率 两个情况 重要思想[逆事件] :7个正品找到了3个次品都找到了 这里首先从六个空中选出两个次品位置&…