Tomcat配置详情
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
部署日志
-