动一动 server.xml — 连接器、安全、访问日志
目标
理解 server.xml 的层级结构,并能够亲手完成添加连接器、关闭端口的安全加固、
修改访问日志格式、外部 docBase 上下文以及响应压缩的配置。
为什么重要
server.xml 是 SI 现场最常被打开的配置文件。然而大多数情况下,
人们处理它的方式是“把从某处拿来的文件复制过来,只改端口”。
结果是关闭端口保持默认值就上了生产环境(安全检查的第一名问题),
访问日志里没有响应时间,对“很慢”的投诉拿不出依据。
本实验让你亲自确认每个属性改变了什么,从而掌握它们。
步骤
- 启动 Tomcat,并将
/opt/tomcat/conf/server.xml备份为/opt/tomcat/conf/server.xml.orig。 - 在
server.xml中添加一个端口 8081 的 HTTP 连接器,然后重启。http://127.0.0.1:8081/必须返回 200。 - 将
Server元素的shutdown属性值从默认值(SHUTDOWN) 改为至少 8 个字符的其他字符串。 - 在
Host内的AccessLogValve的pattern中添加毫秒级处理时间格式符, 重启后发送一次请求, 让/opt/tomcat/logs/localhost_access_log.*.txt中留下日志。 - 创建
/opt/tomcat/conf/Catalina/localhost/api.xml, 将docBase指定为/opt/lab/fixtures/tomcat/api。重启后http://127.0.0.1:8080/api/index.html必须返回 200。 - 为 8080 连接器启用压缩并重启。
curl -H 'Accept-Encoding: gzip' -I http://127.0.0.1:8080/api/big.html的 响应头中必须有Content-Encoding: gzip。 - 创建
/root/tc/validate.sh。接收一个参数(XML 文件路径), XML 正常时以退出码 0 结束,XML 损坏或文件不存在时以非 0 的值结束。 - 创建
/root/tc/serverxml.csv。首行为element,attribute,value,why。 将第 2 到 6 步中修改的 5 项配置各写成一行。why至少 15 个字符。
参考
- 用
xmlstarlet sel -t -v "//Connector/@port" -n /opt/tomcat/conf/server.xml确认值 - 上下文文件示例:
<Context docBase="/경로" />(占位符为路径,一行就够了) - 常见错误 1:修改 XML 之后没有重启。server.xml 不会热加载。
- 常见错误 2:把连接器放进
Engine里。Connector是Service的直接子元素。 - 常见错误 3:以为压缩没有启用,其实是响应小于最小压缩大小。
备份原件
启动 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 个月后想要恢复这个值的人,需要的不是值,而是理由。