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;
}
}

测试示例:

相关推荐
禁默2 分钟前
深入浅出:AWT的基本组件及其应用
java·开发语言·界面编程
Cachel wood9 分钟前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
Code哈哈笑12 分钟前
【Java 学习】深度剖析Java多态:从向上转型到向下转型,解锁动态绑定的奥秘,让代码更优雅灵活
java·开发语言·学习
gb421528715 分钟前
springboot中Jackson库和jsonpath库的区别和联系。
java·spring boot·后端
程序猿进阶15 分钟前
深入解析 Spring WebFlux:原理与应用
java·开发语言·后端·spring·面试·架构·springboot
zfoo-framework23 分钟前
【jenkins插件】
java
风_流沙28 分钟前
java 对ElasticSearch数据库操作封装工具类(对你是否适用嘞)
java·数据库·elasticsearch
ProtonBase1 小时前
如何从 0 到 1 ,打造全新一代分布式数据架构
java·网络·数据库·数据仓库·分布式·云原生·架构
乐之者v1 小时前
leetCode43.字符串相乘
java·数据结构·算法