Apache Tomcat 是一个开源的 Java Servlet 容器和 Web 服务器,以下是 Tomcat 的详细配置说明。
一、Tomcat 目录结构
├── bin/ # 启动/关闭脚本
├── conf/ # 配置文件
│ ├── server.xml # 主配置文件
│ ├── web.xml # 全局web应用配置
│ ├── context.xml # 上下文配置
│ └── tomcat-users.xml # 用户权限配置
├── lib/ # 共享库
├── logs/ # 日志文件
├── webapps/ # 部署目录
├── work/ # 工作目录
└── temp/ # 临时文件
二、核心配置文件详解
1. server.xml (主配置文件)
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<!-- 连接器配置 -->
<Connector
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- AJP连接器 -->
<Connector
port="8009"
protocol="AJP/1.3"
redirectPort="8443" />
<!-- 引擎配置 -->
<Engine name="Catalina" defaultHost="localhost">
<Host
name="localhost"
appBase="webapps"
unpackWARs="true"
autoDeploy="true">
<!-- 上下文配置 -->
<Context
path=""
docBase="myapp"
reloadable="true" />
</Host>
</Engine>
</Service>
</Server>
2. web.xml (全局应用配置)
<web-app>
<!-- 默认Servlet配置 -->
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Session配置 -->
<session-config>
<session-timeout>30</session-timeout> <!-- 30分钟 -->
</session-config>
<!-- MIME类型映射 -->
<mime-mapping>
<extension>pdf</extension>
<mime-type>application/pdf</mime-type>
</mime-mapping>
</web-app>
3. context.xml (上下文配置)
<Context>
<!-- 数据源配置 -->
<Resource
name="jdbc/myDB"
auth="Container"
type="javax.sql.DataSource"
maxTotal="100"
maxIdle="30"
username="dbuser"
password="dbpass"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb" />
<!-- 环境变量 -->
<Environment
name="app.config"
value="/etc/myapp/config.properties"
type="java.lang.String" />
</Context>
4. tomcat-users.xml (用户权限配置)
<tomcat-users>
<!-- 角色定义 -->
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<!-- 用户定义 -->
<user
username="admin"
password="s3cret"
roles="manager-gui,admin-gui"/>
</tomcat-users>
三、常用配置项
1. 端口修改
修改 conf/server.xml
中的 Connector 配置:
<Connector
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
2. 虚拟主机配置
<Host name="www.example.com" appBase="webapps/example" unpackWARs="true">
<Alias>example.com</Alias>
<Context path="" docBase="." />
<Valve
className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="example_access_log"
suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
3. SSL/TLS 配置
1. 生成秘钥
keytool -genkey -alias tomcat -keyalg RSA -keystore /path/to/keystore
2. 修改 server.xml
<Connector
port="8443"
protocol="org.apache.catalina.util.NettyEndpoint"
maxThreads="150"
SSLEnabled="true">
<SSLHostConfig>
<Certificate
certificateKeystoreFile="/path/to/keystore"
certificateKeystorePassword="changeit"
type="RSA" />
</SSLHostConfig>
</Connector>
4. 内存配置
修改 bin/catalina.sh
(Linux) 或 bin/catalina.bat
(Windows):
# Linux
export JAVA_OPTS="-Xms512m -Xmx1024m -XX:MaxPermSize=256m"
# Windows
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MaxPermSize=256m
5. 访问日志配置
<Valve
className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log"
suffix=".txt"
pattern="%h %l %u %t "%r" %s %b"
rotatable="true"/>
四、部署应用
1. 自动部署
将 WAR 文件复制到 webapps/
目录,Tomcat 会自动解压部署。
2. 手动部署
在 conf/Catalina/localhost/
下创建 XML 文件:
<Context
docBase="/path/to/your/app"
path="/yourapp"
reloadable="true" />
五、性能优化
1. 连接器优化
<Connector
port="8080"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
maxThreads="200"
minSpareThreads="10"
acceptCount="100"
enableLookups="false"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript" />
2. JVM 优化
JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC"
3. 禁用不必要的功能
<!-- 在server.xml中禁用AJP连接器(如不使用) -->
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
六、安全管理
1. 禁用管理界面
删除 webapps/manager
和 webapps/host-manager
目录
2. 限制访问
<Context>
<Valve
className="org.apache.catalina.valves.RemoteAddrValve"
allow="192\.168\.1\.\d+|127\.0\.0\.1" />
</Context>
3. 隐藏服务器信息
修改 conf/web.xml
:
<servlet>
<servlet-name>default</servlet-name>
<init-param>
<param-name>server</param-name>
<param-value>Unknown</param-value>
</init-param>
</servlet>
七、常用命令
# 启动Tomcat
./bin/startup.sh # Linux
bin\startup.bat # Windows
# 关闭Tomcat
./bin/shutdown.sh # Linux
bin\shutdown.bat # Windows
# 查看版本
./bin/version.sh
# 调试模式
export CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
./bin/catalina.sh jpda start
八、常见问题解决
-
端口冲突
-
检查端口占用:
netstat -tulnp | grep 8080
-
修改
server.xml
中的端口号
-
-
内存溢出
-
增加 JVM 内存参数
-
检查应用内存泄漏
-
-
应用无法访问
-
检查
webapps
目录是否有应用 -
查看
logs/catalina.out
错误日志
-
-
部署失败
-
检查 WAR 文件是否完整
-
查看
logs/localhost.log
部署日志
-