一、为什么理解 server.xml 很重要

原笔记在完成基础部署和服务管理后,又专门花了大量篇幅讲配置文件。
原因很简单:

  • Tomcat 的很多关键行为都由 server.xml 控制

例如:

  • 监听端口
  • 默认虚拟主机
  • HTTPS 端口
  • 访问日志格式
  • 管理端行为

如果只会启动,不理解 server.xml,后续很多功能都会停留在“能用但不会改”。

二、Tomcat 管理端能做什么

原笔记把 Tomcat 管理端定义为:

  • 一个 Web 页面管理与查看 Tomcat 信息的功能

它适合:

  • 临时查看状态
  • 调优和学习阶段观察 Tomcat

但原笔记也特别提醒:

  • 未来生产优化时一般建议关闭

因为管理端开放本身会增加暴露面。

三、Tomcat 管理端怎么开启

原笔记的步骤主要有两部分。

3.1 配置用户和角色

修改:

/app/tools/tomcat/conf/tomcat-users.xml

示例:

<tomcat-users>
  <role rolename="manager-gui"/>
  <role rolename="admin-gui"/>
  <user username="tomcat" password="1" roles="manager-gui,admin-gui"/>
</tomcat-users>

这一步的作用是:

  • 给管理端准备登录账号和权限角色

3.2 放开访问限制

原笔记通过 sed 把默认只允许 127.* 访问的限制改宽:

sed -i 's#127#\\d+#g' ./host-manager/META-INF/context.xml ./host-manager/WEB-INF/manager.xml ./manager/META-INF/context.xml

然后重启:

systemctl restart tomcat

之后就可以通过浏览器登录 Server Status 页面。

四、server.xml 最核心的结构有哪些

原笔记给出的 server.xml 示例里,最需要优先理解的结构包括:

  • <Server>
  • <GlobalNamingResources>
  • <Service>
  • <Connector>
  • <Engine>
  • <Host>
  • <Valve>

可以把它们理解成 Tomcat 配置的主骨架。

4.1 <Server>

例如:

<Server port="8005" shutdown="SHUTDOWN">

原笔记强调:

  • 8005 是关闭端口
  • 连到这个端口并发送指定字符,可以关闭 Tomcat

4.2 <Connector>

例如:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

它的作用是:

  • 定义处理 HTTP 请求的监听端口

原笔记特别指出:

  • 8080 处理普通 HTTP
  • 8443 用于 HTTPS

4.3 <Engine>

例如:

<Engine name="Catalina" defaultHost="localhost">

它决定:

  • 默认虚拟主机是谁

4.4 <Host>

原笔记把它类比成虚拟主机配置区域。
这里会定义:

  • appBase
  • unpackWARs
  • autoDeploy

也就是:

  • 应用目录在哪
  • 是否自动解压 WAR
  • 是否自动部署应用

4.5 <Valve>

访问日志通常就配置在这里,例如:

<Valve className="org.apache.catalina.valves.AccessLogValve" ... />

这部分后面也正好和日志格式规范关联起来。

五、Tomcat 配置和 Nginx 配置有什么相似之处

原笔记专门做了一个对比,非常适合帮助运维人员建立迁移理解。

维度 Tomcat Nginx
虚拟主机 Host server {}
域名 name="域名" server_name
端口 Connector port="8080" listen 80
站点目录 appBase="webapps" root /path
日志格式 Valve pattern log_format

这个对比很有价值,因为它说明:

  • 虽然语法不同
  • 但 Web 中间件之间很多核心概念是相通的

六、为什么要规范 Tomcat 访问日志格式

原笔记在这一节重点做了一件事:

  • 让 Tomcat 日志更接近 Nginx 的访问日志思路

这样做的好处包括:

  • 便于统一分析
  • 便于排查来源、状态码、Referer、User-Agent
  • 便于接入日志平台或和前端代理日志一起对照

原笔记修改后的核心日志格式是:

pattern="%h %l %u %t &quot;%r&quot; %s %b &quot;%{Referer}i&quot;&quot;%{User-Agent}i&quot;&quot;%{X-ForwardedFor}i&quot;"

这份格式重点补齐了:

  • Referer
  • User-Agent
  • X-ForwardedFor

这样在经过 Nginx 代理后,也能在 Tomcat 侧看到更完整的请求来源信息。

七、怎么验证访问日志已经按新格式生效

原笔记的操作步骤是:

1、修改 server.xml
2、重启 Tomcat
3、打开访问日志文件

tailf ../logs/localhost_access_log.2024-01-02.txt

4、再从浏览器发起访问,例如从百度跳过去访问 Tomcat

这样就能在日志里观察到:

  • 请求行
  • 状态码
  • Referer
  • User-Agent
  • 代理头

八、小结

Tomcat 的核心配置理解,基本离不开三件事:

  • 会开管理端,但知道生产上通常要关
  • 能看懂 server.xml 里的 Connector、Engine、Host、Valve
  • 会把访问日志格式调成更适合排障和分析的样子

原笔记这一部分其实已经把 Tomcat 配置运维最常用的基础打得很完整了。