TT Lab
开始
学习 学习路径 课程

Tomcat 与 nginx 运维

动一动 server.xml — 连接器、安全、访问日志

在 TT Lab 中继续学习

目标

理解 server.xml 的层级结构,并能够亲手完成添加连接器、关闭端口的安全加固、 修改访问日志格式、外部 docBase 上下文以及响应压缩的配置。

为什么重要

server.xml 是 SI 现场最常被打开的配置文件。然而大多数情况下, 人们处理它的方式是“把从某处拿来的文件复制过来,只改端口”。 结果是关闭端口保持默认值就上了生产环境(安全检查的第一名问题), 访问日志里没有响应时间,对“很慢”的投诉拿不出依据。 本实验让你亲自确认每个属性改变了什么,从而掌握它们。

步骤

  1. 启动 Tomcat,并将 /opt/tomcat/conf/server.xml 备份为 /opt/tomcat/conf/server.xml.orig。
  2. 在 server.xml 中添加一个端口 8081 的 HTTP 连接器,然后重启。 http://127.0.0.1:8081/ 必须返回 200。
  3. 将 Server 元素的 shutdown 属性值从默认值(SHUTDOWN) 改为至少 8 个字符的其他字符串。
  4. 在 Host 内的 AccessLogValve 的 pattern 中添加毫秒级处理时间格式符, 重启后发送一次请求, 让 /opt/tomcat/logs/localhost_access_log.*.txt 中留下日志。
  5. 创建 /opt/tomcat/conf/Catalina/localhost/api.xml, 将 docBase 指定为 /opt/lab/fixtures/tomcat/api。重启后 http://127.0.0.1:8080/api/index.html 必须返回 200。
  6. 为 8080 连接器启用压缩并重启。 curl -H 'Accept-Encoding: gzip' -I http://127.0.0.1:8080/api/big.html 的 响应头中必须有 Content-Encoding: gzip。
  7. 创建 /root/tc/validate.sh。接收一个参数(XML 文件路径), XML 正常时以退出码 0 结束,XML 损坏或文件不存在时以非 0 的值结束。
  8. 创建 /root/tc/serverxml.csv。首行为 element,attribute,value,why。 将第 2 到 6 步中修改的 5 项配置各写成一行。 why 至少 15 个字符。

参考

备份原件

启动 Tomcat,并将 /opt/tomcat/conf/server.xml 备份为 /opt/tomcat/conf/server.xml.orig。

修改配置文件之前必须先备份,这一点没有商量的余地。备份件本身也必须是有效的 XML 才有意义。

创建附加连接器

在 server.xml 中添加一个端口 8081 的 HTTP 连接器,然后重启。 http://127.0.0.1:8081/ 必须返回 200。

Connector 可以在 Service 下放置多个。复制已有的连接器,只改端口即可。重启后才会生效。

修改关闭命令

将 Server 元素的 shutdown 属性值从默认值(SHUTDOWN) 改为至少 8 个字符的其他字符串。

如果 Server 元素的 shutdown 属性保持默认值,任何能连上 8005 端口的人都可以关闭 WAS。这是安全检查的常客。

在访问日志中加入响应时间

在 Host 内的 AccessLogValve 的 pattern 中添加毫秒级处理时间格式符, 重启后发送一次请求, 让 /opt/tomcat/logs/localhost_access_log.*.txt 中留下日志。

在 AccessLogValve 的 pattern 中添加表示处理时间的格式符。毫秒级格式符和秒级格式符是分开的,请查阅文档。重启后需要发送一次请求才会生成日志。

为 webapps 之外的目录提供服务

创建 /opt/tomcat/conf/Catalina/localhost/api.xml, 将 docBase 指定为 /opt/lab/fixtures/tomcat/api。重启后 http://127.0.0.1:8080/api/index.html 必须返回 200。

在 conf/Catalina/localhost/ 下放置“上下文名.xml”,该名称就成为上下文路径,并且可以通过 docBase 指向任意路径。

连接器压缩配置

为 8080 连接器启用压缩并重启。 curl -H 'Accept-Encoding: gzip' -I http://127.0.0.1:8080/api/big.html 的 响应头中必须有 Content-Encoding: gzip。

通过 Connector 属性启用压缩。由于有最小大小标准,较小的响应不会被压缩。也别忘了客户端必须发送 Accept-Encoding。

配置验证脚本

创建 /root/tc/validate.sh。接收一个参数(XML 文件路径), XML 正常时以退出码 0 结束,XML 损坏或文件不存在时以非 0 的值结束。

这是在部署前确认 XML 是否损坏的脚本。验证作为参数传入的文件,并通过退出码告知结果,才能用于自动化。xmlstarlet 或 python 选顺手的用即可。

记录变更内容

创建 /root/tc/serverxml.csv。首行为 element,attribute,value,why。 将第 2 到 6 步中修改的 5 项配置各写成一行。 why 至少 15 个字符。

配置变更必须同时留下“改了什么、为什么改”。6 个月后想要恢复这个值的人,需要的不是值,而是理由。