2019/06/28 tomcat配置进阶及反代(04)

本文详细解读了Tomcat server.xml中的关键组件,如Server、Service、Connector和Context,以及它们在部署中的角色。重点讲解了HTTP/HTTPS/AJP连接器配置、虚拟主机设置和访问控制阀门。了解如何配置反代服务器,包括Nginx与HTTPD的代理配置,以及如何处理静态和动态内容的调度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tomcat server。xml中的常用组建
instance 实例

在这里插入图片描述
tomcat的常用组件配置:
Server:代表tomcat instance,即表现出的一个java进程;监听在8005端口,只接收“SHUTDOWN”。
各server监听的端口不能相同,因此,在同一物理主机启动多个实例时,需要修改其监听端口为不同的端口;

开启了,太危险,就可以把端口,或者命令修改
port="-1",
shutdown="RANDOM_CHARCTER"

Service:用于实现将一个或多个connector组件关联至一个engine组件;/
**
Connector组件:
负责接收请求,常见的有三类http/https/ajp;
一般部署环境的不同 到达tomcat的请求可分为两类:
(1) standalone (工作再独立模式下): 请求来自于客户端浏览器;(tomncat直接面向客户端,)
(2) 由其它的web server反代:来自前端的反代服务器;(tomcat被反代服务器代理请求)
(nginx只支持http协议反代,tomcat也仅能使用http连接器)
nginx --> http connector --> tomcat
(如果要使用httpd反代,就有两种选择
httpd(proxy_http_module) (htto连接器)–> http connector --> tomcat
httpd(proxy_ajp_module)(ajp连接器) --> ajp connector --> tomcat
非标准模式:(需要装载第三方模块)
httpd(mod_jk) --> ajp connector --> tomcat(这个模块不是自带的,得去编译这个模块才可以,官方不推荐使用)**
定义connector ,是一个xml格式的
在这里插入图片描述
对于连接器来讲,常用的属性有很多
在这里插入图片描述
默认使用本地所有地址,所以下面两个都没有指定address
connectiontimeout 超时时间
max threads 最大线程数(并发链接数,默认为200)
enablelookups 是否启用dns查询功能(一旦启用,就有可能不断地反解客户端的ip地址,如果有必要就关了来提升性能)
acceptcount 等待队列最大长度(很多服务器有并发上限,超出上限后,排队等待,不能无限制,因为每一个排队的成员都会占用内存的)
secure=true 代表这个链接必须使用ssl会话链接
ssl enable也要启动起来

在这里插入图片描述
scheme指定协议,
ajp只有用httpd反代才会用到

在这里插入图片描述
一般都是两级反代的,本地的也有反代,每个主机上都有一个反代tomcat,构建的服务叫lnat
在这里插入图片描述在这里插入图片描述改成1000个,等待队列为200,端口可以改成80,但是是普通用户,启动不了80端口
可以再ipvs上加规则redirect规则,用户访问80时都ipvs重定向到本机的8080端口,ldirect
在这里插入图片描述
engine 是用来定义容器组建,只有这三个属性
jvmroot jvm的路由标识符,做会话粘性是会有用,负载均衡
haproxy可以给用户请求强行插入一个cookie属性指明 web server等于哪个server服务器地址,这样下次请求来的时候,就可以根据cookie判曾经被调度到哪个主机上
每个用户请求时都回插入一个jvm引擎的标识符,这个标识符,如果后端有多个tomcat主机实例,每一个都应该不同

在这里插入图片描述
host组建
在这里插入图片描述

Host组件:位于engine内部用于接收请求并进行相应处理的主机或虚拟主机,示例:
<Host name=“localhost” appBase=“webapps”
unpackWARs=“true” autoDeploy=“true”
</Host

常用属性说明:
(1) appBase:此Host的webapps的默认存放目录,指存放非归档的web应用程序的目录或归档的WAR文件目录路径;
可以使用相对路径,相当于使用基于$CATALINA_BASE(当前实例运行的根目录,程序根目录不是页面文件根目录)
当前变量所定义的路径的相对路径;
(2) autoDeploy(自动部署):在Tomcat处于运行状态时,将某webapp放置于appBase所定义的目录中时,
是否自动将其部署至tomcat;

示例:
<Host name=“tc1.magedu.com” appBase="/appdata/webapps"
unpackWARs=“true” 是否自动产开war文件
autoDeploy=“true”
</Host

可以在这之上定义一个虚拟主机
# mkdir -pv /appdata/webapps
# mkdir -pv /appdata/webapps/ROOT/{lib,classes,WEB-INF}
提供一个测试页即可;

name 名字
appbase Host的webapps的默认存放目录
unpackWARs=“true” 是否自动产开war文件
autodeploy 自动部署

在这里插入图片描述
systemct restart tomcat 重启服务
在这里插入图片描述
在这里插入图片描述当时的站点时部署在root下的
在这里插入图片描述
假如这个主机上还要部署其他的应用程序,做软连接方便以后更新
在这里插入图片描述
没有做部署其实也可以被访问
在这里插入图片描述
现在要可写
在这里插入图片描述
对于host组建里面还可以定义一个context组建
在这里插入图片描述

Context组件:
示例:
<Context path="/PATH" docBase="/PATH/TO/SOMEDIR" reloadable=""/
url 路径 映射到哪个文档路径下,极其类似alias
1.path url 路径是什么
2.docbase 文档路径是什么
3.reloadable 是否可以自动装载的
(两个后面都不带斜线,要带就都带)

综合示例:
<Host name=“node1.magedu.com” appBase="/web/apps" unpackWARs=“true” autoDeploy=“true”》
<Valve className=“org.apache.catalina.valves.AccessLogValve” directory=“logs”
prefix=“node1_access” suffix=".log"
pattern="%h %l %u %t “%r” %s %b" /》
<Context path="/test" docBase=“test” reloadable=""》
<Valve className=“org.apache.catalina.valves.AccessLogValve” directory=“logs”
prefix=“node1_test_access_” suffix=".log"
pattern="%h %l %u %t “%r” %s %b" /》
</Context》
</Host》

删除刚才的目录
在这里插入图片描述
现在就找不到了
在这里插入图片描述
现在想通过/eshop来访问
在这里插入图片描述
在这里插入图片描述
编辑配置文件
在host内部加一个组件context
path 定义url /eshop
docbase 文档跟路径 /e-shop/shopxx
reloadable 是否自动重新装载

在这里插入图片描述
重启tomcat systemct restart
在这里插入图片描述
就成功了
在这里插入图片描述
context完全类似于alias
docbase使用相对路径就放在了host的appbase下,如果就使用默认名访问可以不定义context,如果想要别名进行访问,也可以照样定义context,就算使用相对路径也没有任何问题

在这里插入图片描述
组建内部还有种叫valve的组件(种 类很多,需要定义是哪一种类
accesslogvalve 基于日志访问控制的,remoteaddrvalve 基于地址访问控制的)

在这里插入图片描述
**一般定义的机会不太多,定义访问日志的机会还是有的,在配置文件中默认就有一个访问日志
复制valve 贴到host中
每一个host都可以使用自己的访问呢日志
prefix 日志前缀 suffix 后缀
pattern 指的是日志格式
&quot表示引号
%r请求方法,协议,url **
在这里插入图片描述
再次重启tomcat
访问主站,查看日志

在这里插入图片描述
rpm安装,默认在这
在这里插入图片描述
解压包的在下面
在这里插入图片描述
在这里插入图片描述
将来用的最多的就是配置host和context
在这里插入图片描述
经常需要配置自己的虚拟主机
只能基于主机名的虚拟主机
因为address 和port都是定义在connector上的,而不是定义在host上的

对于tomcat来讲基本配置没问题的,但是前面需要反代用户请求
如何去组合三种形式的反代
1.nt
2.at(基于http,ajp连接器)
为了能完整配置,换个主机来做,从头到尾如何配置反代,应用程序如何构建

第一台主机是反代服务器(两接口)
n2 tomcat
n3 tomcat

在这里插入图片描述
n1做两个接口,作为nginx反代服务器
n2内网主机
第一步先同步时间

在这里插入图片描述
还需要配置javahome catalinahome,内网主机需要访问管理接口,最好要设置好用户,基于admingui访问两个管理程序之前配置过可以复制过去
在这里插入图片描述
编辑server。xml
在这里插入图片描述
额外加一个虚拟主机,不再是默认的
配置内网地址

在这里插入图片描述
在这里插入图片描述
启动内网tomcat
在这里插入图片描述
可以使用内网地址来访问 了
在这里插入图片描述
n1服务器使用反代服务器
在这里插入图片描述
rm .ssh/khnownhosts
nginx做反代只需要加locaton
就全部反代过来

在这里插入图片描述默认主机监听的是80端口,其他主机就只能用其他主机名来区别的
为了便捷,在conf.d/下进行修改

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
客户端机器加解析
在这里插入图片描述
现在访问其实就是这个就界面
在这里插入图片描述
可以在后端n2上创建一个测试应用,在它的默认网页下创建即可
在这里插入图片描述
在这里插入图片描述
示例程序:
演示效果,在TomcatA上某context中(如/test),提供如下页面

<%@ page language=“java” %>

TomcatA

TomcatA.magedu.com





<% session.setAttribute(“magedu.com”,“magedu.com”); %>






Session ID<%= session.getId() %>
Created on<%= session.getCreationTime() %>



在这里插入图片描述
不重启服务,直接访问试试
只要主机是同一个session是不变的

在这里插入图片描述
我们的访问其实都到达nginx,由nginx反代到后端主机

在这里插入图片描述
这样的话tomcat既要处理静态内容,还要处理动态内容
在nginx上.jsp的调度到后端主机上去,其他的调度到另外的主机上去

在这里插入图片描述
在这里插入图片描述
java有些文件是以do结尾的
在这里插入图片描述
在这里插入图片描述
现在不保存,
现在看看http如何反代,停止nginx服务

在这里插入图片描述
在这里插入图片描述
使用httpd做反代时配置方法稍微麻烦点,因为要考虑 到底用的是哪一种连接器来连接的
对httpd来讲,由三个模块

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
现在需要配置之httpd的虚拟主机
在这里插入图片描述
在这里插入图片描述
httpd -M 查看模块
在这里插入图片描述
proxy模块是主反代功能的,必须要启动起来
在这里插入图片描述
反代http协议模块 proxy,确认是安装的
在这里插入图片描述
proxyrequests off关闭正向代理
proxyvia 是否在响应报文中加via
proxypreservehost 是否把请求报文中的host首部一并转到后端去

在这里插入图片描述
反代主机由两个virtual host
如果后端主机也有虚拟主机,那么proxypath反代如果写的ip地址,该是反代到哪个主机上
应该是默认的,如果要对应
那么由两种方式,proxypath跟主机名,在不然可以保留主机头,传递给后端,让后端用主机头来判断

在这里插入图片描述
**require all granted 能够被哪些用户访问
prioxypass 写了/ 后面也一定要加/
**
在这里插入图片描述
关闭正向代理
能够把主机头传递给后端去
是否在响应报文中加一个via首部
所有的proxy功能
proxypass /代理到 192.168.10.11:8080/
proxypassreverse 如果后端主机返回一个重定向,这个url重定向结果响应给客户端
前面只是定义proxy功能能被谁使用
location / 定义哪些url能被访问
require all granted

在这里插入图片描述
在这里插入图片描述
路径无效,注释掉
在这里插入图片描述
启动服务
在这里插入图片描述
能够访问
在这里插入图片描述
查看日志
在这里插入图片描述
甚至可以访问test的url,加一行
在这里插入图片描述
httpd -t检查语法
重启httpd服务
可以访问了

在这里插入图片描述
如果把test映射成前端站点配置也可以
在这里插入图片描述
httpd -t检查语法重启服务
如果要使用ajp只需要把后面的链接改一下就可以了
在这里插入图片描述
**主机名改成iunix,连接器协议是ajp,端口不是8080,是8009
使用此功能一定是ajp模块要存在的 **在这里插入图片描述
在这里插入图片描述
重启服务,没有问题能够访问
在这里插入图片描述
在这里插入图片描述
用ajp协议的时候,tomcat和反代服务器中间通讯用的是ajp的二进制协议,可以把端口注释掉,直接链接ajp连接器,后面的用户就不会直接访问tomcat8080端口了,可以避免用户绕过前端代理而直接访问后端服务器

提醒,如果后端主机上有多个虚拟主机,期望反代指向一个特定的虚拟主机而不是默认的,就不能使用ip地址来反代、
http上给的应该是主机名,并确保前端主机能够解析这个主机名

在这里插入图片描述
在这里插入图片描述
有可能httpd处于安全会隐藏这个首部
表示响应报文中加上via,表示由谁来代理 的

第一种方式
在这里插入图片描述
第二张at机制
在这里插入图片描述
mod_jk属于第三方模块,需要编译安装

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值