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官网下载源码包安装启动

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

安装并启动Tomcat

bash 复制代码
[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

查看端口

bash 复制代码
[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相关目录与文件

bash 复制代码
[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启动文件

bash 复制代码
[root@tomcat ~]# vim /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/etc/alternatives/jre_openjdk
bash 复制代码
[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首部

bash 复制代码
[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负载均衡配置

bash 复制代码
[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;
}
}

测试示例:

相关推荐
老华带你飞几秒前
工会管理|基于springboot 工会管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·spring
自在极意功。几秒前
MyBatis配置文件详解:environments、transactionManager与dataSource全面解析
java·数据库·tomcat·mybatis
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ5 分钟前
配置springdoc swagger开关
java
Echo flower8 分钟前
Spring Boot WebFlux 实现流式数据传输与断点续传
java·spring boot·后端
没有bug.的程序员15 分钟前
微服务中的数据一致性困局
java·jvm·微服务·架构·wpf·电商
鸽鸽程序猿19 分钟前
【Redis】Java客户端使用Redis
java·redis·github
悦悦子a啊19 分钟前
使用 Java 集合类中的 LinkedList 模拟栈以此判断字符串是否是回文
java·开发语言
Lucky小小吴21 分钟前
java代码审计入门篇——Hello-Java-Sec(完结)
java·开发语言
一个想打拳的程序员23 分钟前
无需复杂配置!用%20docker-webtop%20打造跨设备通用%20Linux%20桌面,加载cpolar远程访问就这么简单
java·人工智能·docker·容器
一起养小猫26 分钟前
LeetCode100天Day2-验证回文串与接雨水
java·leetcode