6. 配置详解
server.xml 内部有一个 server 的定义
每个 server 中可以定义多个 service,
每个 service 中可以定义多个 connector 供自己的 engine 使用,
每个 engine 中可以定义多个 host,
host 为虚拟主机, 可以指定项目在文件系统同的路径和其他配置信息。
查看配置,下面会一块一块讲解,删除注释
cat /usr/local/tomcat/conf/server.xml
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
6.1. <Server>
<Server port="8005" shutdown="SHUTDOWN">
8005是 tomcat 的管理端口,此条配置会让 tomcat 监听在本地的 127.0.0.1:8005 端口,使用 telnet 发送SHUTDOWN
字符串后,tomcat 会关机。为了安全和规范,建议更改端口,更改 SHUTDOWN
字符串为无规律复杂字符串。
- 示例telnet关闭tomcat。先安装telnet
yum install telnet
- telnet连接上后输入
SHUTDOWN
回车
# telnet 127.0.0.1 8005
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
SHUTDOWN
Connection closed by foreign host.
- 查看端口,已经被关闭了
# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 128 :::22 :::*
- 这个管理功能建议禁用,改shutdown为一串猜不出的字符串。如:
<Server port="8005" shutdown="44ba3c71d57f494992641b258b965f28">
6.2. <GlobalNamingResources>
<GlobalNamingResources>
<Resource name="UserDatabase"
auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
该配置段可以指定一些全局配置,下面我配置一下用户验证功能,根据配置内容我们去修改 tomcat-users.xml
文件
用户认证,配置文件路径是/usr/local/tomcat/conf/tomcat-users.xml
。
- 打开
tomcat-users.xml
,删除注释
我们需要一个角色manager-gui
。
vim /usr/local/tomcat/conf/tomcat-users.xml
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<role rolename="manager-gui"/>
<user username="chen" password="123" roles="manager-gui"/>
</tomcat-users>
- Tomcat启动加载后,这些内容是常驻内存的。如果配置了新的用户,需要重启Tomcat。
su - tomcat -c '/usr/local/tomcat/bin/shutdown.sh'
su - tomcat -c '/usr/local/tomcat/bin/startup.sh'
- 访问manager的时候返回403,提示中告诉去manager的context.xml中修改
vim /usr/local/tomcat/webapps/manager/META-INF/context.xml
修改allow这个键值,在结尾加|192\.168\.\d+\.\d+
再次测试,成功。
登录
6.3. <Service>
<Service name="Catalina">
一般情况下,一个Server实例配置一个Service,name属性相当于该Service的ID。
6.4. <Connector>
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
连接器配置
redirectPort,如果访问HTTPS协议,自动转向这个连接器。但大多数时候,Tomcat并不会开启HTTPS,因为Tomcat往往部署在内部,HTTPS性能较差。
6.5. <Engine>
<Engine name="Catalina" defaultHost="localhost">
引擎配置
defaultHost指向内部定义某虚拟主机。缺省虚拟主机可以改动,默认localhost。
6.6. <Host>
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
HTMLCopy
虚拟主机配置
name
,必须是主机名,用主机名来匹配。
appBase
,当期主机的网页根目录,相对于CATALINA_HOME,也可以使用绝对路径
unpackWARs
,是否自动解压war格式
autoDeploy
,热部署,自动加载并运行应用