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

测试示例:

相关推荐
七星静香6 分钟前
laravel chunkById 分块查询 使用时的问题
java·前端·laravel
Jacob程序员7 分钟前
java导出word文件(手绘)
java·开发语言·word
ZHOUPUYU8 分钟前
IntelliJ IDEA超详细下载安装教程(附安装包)
java·ide·intellij-idea
stewie611 分钟前
在IDEA中使用Git
java·git
Elaine20239126 分钟前
06 网络编程基础
java·网络
G丶AEOM28 分钟前
分布式——BASE理论
java·分布式·八股
落落鱼201329 分钟前
tp接口 入口文件 500 错误原因
java·开发语言
想要打 Acm 的小周同学呀29 分钟前
LRU缓存算法
java·算法·缓存
镰刀出海32 分钟前
Recyclerview缓存原理
java·开发语言·缓存·recyclerview·android面试
阿伟*rui3 小时前
配置管理,雪崩问题分析,sentinel的使用
java·spring boot·sentinel