Apache Tomcat与反向代理

news2024/11/15 9:40:14

在这里插入图片描述
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.coloradmin.cn/o/2076806.html

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

相关文章

C++学习笔记——三角形面积

一、题目描述 二、代码 #include <iostream> #include <bits/stdc.h> using namespace std; int main() {double a0,b0,c0;cin >> a >> b >> c;double p(abc)/2;double dp * (p-a)* (p-b)* (p-c);cout<< fixed << setprecision(3)&l…

QT 简易网页信息抓取程序模板基础代码

有些网页爬不了&#xff0c;只是一个简单的代码。 项目结构 NetBugBaseCode.pro #------------------------------------------------- # # Project created by QtCreator 2024-08-26T15:13:10 # #-------------------------------------------------QT core gui netw…

抖音小红书爆款预定,Tiktok爆火的短视频玩法,Ai生成宝宝走秀视频,萌翻全场

大家好&#xff0c;我是方知有&#xff0c;每天分享一个互联网副业&#xff0c;喜欢的朋友可以关注~ 今天给大家分享在Tiktok爆火的短视频玩法&#xff0c;现在抖音小红书制作这类型视频的人数还不多&#xff0c;大家可以赶快操作起来&#xff0c;这个玩法就是用Ai生成宝宝走秀…

论坛测试报告1.0

版本号&#xff1a; 作者&#xff1a; 日期&#xff1a; 目录 1 引言1.1 项目概述1.2 文档概述1.2.1 编写目的1.2.2 读者对象 1.3 产品需求和设计文档 2 测试执行2.1测试工具2.2制定测试计划2.3设计测试用例2.4执行测试用例 3.测试结果4.遗留风险5.测试结果评估 1 引言 1.1 项…

【kubernetes】Pod生命周期-启动钩子、停止钩子

一&#xff0c;Pod的生命周期 pod从开始创建到终止退出的时间范围称为Pod生命周期。pod生命周期包含以下几个重要流程&#xff1a; 初始化容器&#xff08;initContainers&#xff09;。 一个pod可以拥有任意数量的init容器。init容器是按照顺序以此执行的&#xff0c;并且仅…

HAL库:中断 方式按键检测:抬起执行、按下执行、长按短按检测、延时执行

目录 HAL库&#xff1a;中断 方式按键检测&#xff1a;抬起执行、按下执行、长按短按检测、延时执行 注意事项&#xff1a; 初始化部分&#xff1a; 回调函数部分 HAL库&#xff1a;中断 方式按键检测&#xff1a;抬起执行、按下执行、长按短按检测、延时执行 注意事项&am…

如何在CMD/PowerShell中使用命令行管理IIS

使用通用IIS命令行管理工具&#xff1a; C:\Windows\System32\inetsrv\appcmd.exe 查看现有站点 1 appcmd list site 添加一个新站点 1 appcmd add site /name:"My New Site" /id:2 /bindings:http/*:81: /physicalPath:"c:\inetpub\mynewsite" /name …

559. N 叉树的最大深度(迭代法)

目录 一&#xff1a;题目&#xff1a; 二&#xff1a;代码&#xff1a; 三&#xff1a;结果&#xff1a; 一&#xff1a;题目&#xff1a; 给定一个 N 叉树&#xff0c;找到其最大深度。 最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。 N 叉树输入按层序遍历…

学习系列三:V8目标检测与分割自动化标注

学习系列三&#xff1a;YOLOv8目标检测与分割自动化标注 提示&#xff1a;本次文章主要介绍yolov8目标检测与自动化标注(较简单&#xff0c;通用性比较强&#xff0c;标签格式txt)&#xff0c;yolov8实例分割与自动化标注(程序较复杂&#xff0c;自动化标注效果有待提升,标签格…

SE11 没有激活的名称表存 No active nametab exists for

背景&#xff1a; SE11中减少某个非空表的字段的长度后&#xff0c;在SE14中的操作不当&#xff0c;并且对该表进行了删除重建的操作后&#xff0c;发生SE11激活该表报错。 原因&#xff1a; 出现了一些未知原因&#xff0c;导致该表在底层数据库存在&#xff0c;但是运行时对…

柔版印刷版市场前景:预计2030年全球市场规模将达到20.9亿美元

一、当前市场状况 目前&#xff0c;柔版印刷版市场呈现出较为稳定的发展态势。随着全球经济的逐步复苏&#xff0c;包装印刷等领域对柔版印刷版的需求持续增长。柔版印刷版具有环保、高效、印刷质量高等特点&#xff0c;在食品包装、标签印刷等行业中得到广泛应用。 全球前四…

微信聊天记录删除怎么恢复?两个抱藏方法快速恢复数据

微信作为我们日常沟通的重要工具&#xff0c;存储了大量的聊天记录&#xff0c;这些记录往往承载着珍贵的记忆或重要的工作信息。我们在日常使用微信时不小心左滑删除了和领导的聊天记录&#xff01;里面还有很重要的工作内容&#xff0c;删除的微信聊天记录怎么恢复啊&#xf…

环境问题处理:Python写工具,转换excel内容合并到xml中(openpyxllxml)

问题描述 提示报错&#xff0c;但是没有像java代码的解决方案推荐。 Note&#xff1a;PycharmProjects\项目名\venv\Scripts 创建项目时自带的脚本&#xff0c;也包含python.exe 查看python文件有输出路径&#xff0c;使用python也能打开python3.8&#xff0c;但是无法查找pyt…

Java学习_22_网络编程

文章目录 前言网络编程网络编程三要素IPInetAddress 端口号协议OSI七层模型TCP/IP模型UDP协议TCP协议 综合练习多发多收接收和反馈上传文件上传文件重名问题上传文件多线程问题上传文件线程池问题BS架构 总结 前言 博客仅记录个人学习进度和一些查缺补漏。 学习内容&#xff1…

软考:一个月拿下软件设计师

前言 软考我满打满算也就准备了一个月不到&#xff0c;期间也走了不少弯路&#xff1b;特地做个博客记录一下&#xff0c;也给其它备考的人一些建议。 我是24年上半年参加的考试&#xff0c;说实在的这年下午题有几道不好写。 只要上午成绩和下午成绩都过45就算及格了。 正文…

【Git保姆级使用教程】Git从入门到精通超级详细的使用教程,一套教程带你搞定Git(高见龙版本)。

目录 Git下载与安装设置GitGit的用户设置 使用Git新增初始Repository将文件交给Git管控(将文件加入暂存区)查看Git文件记录查找commit记录更改提交commit的记录撤销提交commit 将某些文件取消Git版控Git中删除或更改文件名Git查看某个文件的某一行代码是谁写的.git目录中有什么…

Tower for Mac Git客户端管理软件

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功 三、运行测试1、打开软件&#xff0c;测试2、克隆项目&#xff0c;测试 安装完成&#xf…

港股震荡中保持乐观,市场信心回来了!

港股上午盘三大指数集体上涨&#xff0c;恒生科技指数一度冲高至1.54%&#xff0c;最终收涨0.98%&#xff0c;恒生指数上涨1.06%。盘面上&#xff0c;大型科技股多数维持上涨行情&#xff0c;百度、腾讯涨超1.5%&#xff0c;快手、美团小幅上涨&#xff0c;阿里巴巴、京东飘绿&…

Java:Date类

文章目录 Date类常用方法代码演示 SimpleDateFormat常用方法代码演示时间格式常见符号SimpleDateFormat解析字符串为Date对象代码总结 案例&#xff1a;秒杀活动&#xff1a; 黑马学习笔记 这些方法在API文档都能查到 Date类 常用方法 代码演示 package Time;import java.uti…

杰发科技AC7801——Flash模拟EEP内存(2)

1. 默认配置在1000个地址存储1000个数据 配置如下 计算地址 查看地址内容&#xff0c;等到打印完成 计算符合&#xff0c;从0-999共计1000 2. 修改配置在65536地址存储65536个数据 配置还是这个 因为传进去的地址是uint16_t&#xff0c;因此最大值是65536&#xff0c;写65536…