在Debian系统上配置Tomcat时,有几个重要的注意事项可以帮助你确保服务器的稳定性和安全性。以下是一些关键点:
更新系统: 在安装Tomcat之前,确保系统是最新的。
sudo apt update
sudo apt upgrade
安装Java运行环境(JRE或JDK): Tomcat需要Java来运行,因此必须安装Java。推荐安装OpenJDK。
sudo apt install openjdk-11-jdk
选择合适的Tomcat版本: 根据需要选择稳定版或测试版。对于大多数用户,推荐使用稳定版。
下载并解压Tomcat:
从Apache Tomcat官方网站下载最新版本的Tomcat,并解压到合适的目录,例如 /opt
。
wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.76/bin/apache-tomcat-9.0.76.tar.gz
tar -zxvf apache-tomcat-9.0.76.tar.gz -C /opt/
创建Tomcat用户和组: 为了安全起见,建议创建一个专用的系统用户来运行Tomcat。
sudo groupadd tomcat
sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat
配置Tomcat权限: 设置Tomcat目录及其子目录的用户和权限。
sudo chgrp -R tomcat /opt/tomcat
sudo chmod -R 755 /opt/tomcat/conf /opt/tomcat/logs /opt/tomcat/webapps /opt/tomcat/temp
sudo chown -R tomcat:tomcat /opt/tomcat
创建systemd服务文件:
创建并配置 /etc/systemd/system/tomcat.service
文件。
sudo nano /etc/systemd/system/tomcat.service
添加以下内容:
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment=JAVA_HOME=/usr/lib/jvm/default-java
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat/apache-tomcat-9.0.76
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:UseParallelGC'
Environment='JAVA_OPTS=-Djava.security.egd=file:/dev/./urandom'
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
Restart=always
[Install]
WantedBy=multi-user.target
重新加载systemd配置并启动Tomcat:
sudo systemctl daemon-reload
sudo systemctl start tomcat
sudo systemctl enable tomcat
修改默认端口号:
为了增强安全性,避免使用默认端口(如8080)。编辑 /etc/tomcat/server.xml
文件,找到相应的 Connector
元素并修改 port
属性值。
<Connector port="1234" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
配置虚拟主机:
为多个应用配置不同的虚拟主机,通过 Engine
和 Host
标签实现。
<Engine name="Catalina" defaultHost="www.site1.com">
<Host name="www.site1.com" appBase="webapps/site1" unpackWARs="true" autoDeploy="true" />
<Host name="www.site2.com" appBase="webapps/site2" unpackWARs="true" autoDeploy="true" />
</Engine>
设置字符编码:
为了避免中文乱码情况,可以在 server.xml
的 Connector
标签中添加 uriencoding
指定字符编码,例如:
<Connector port="8090" protocol="HTTP/1.1" connectionTimeout="20000" uriencoding="utf-8" redirectPort="8443" />
管理用户权限:
在 /etc/tomcat/tomcat-users.xml
文件中添加用户角色和权限。
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="admin" password="StrongP@ssw0rd!" roles="manager-gui,admin-gui"/>
</tomcat-users>
启用APR本地库:
启用APR本地库可以提升静态资源处理性能。需要在 server.xml
中配置:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"/>
隐藏版本信息:
隐藏Tomcat版本号有助于防止潜在攻击者识别服务器软件的具体版本,从而减少针对性攻击的风险。在 server.xml
中设置 server
属性为自定义字符串:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" server="CustomServerName"/>
日志切割:
防止日志文件过大,可以启用按天分割日志。编辑 /etc/tomcat/logging.properties
文件:
handlers = 1catalina.org.apache.juli.AsyncFileHandler
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.rotatable = true
1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8
禁用管理端弱口令:
在 tomcat-users.xml
中配置强密码,禁用默认的管理员账户。
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="admin" password="StrongP@ssw0rd!" roles="manager-gui,admin-gui"/>
</tomcat-users>
删除不必要的应用:
如 docs
和 examples
文件夹,减少潜在的安全风险。
sudo rm -rf /opt/tomcat/webapps/docs /opt/tomcat/webapps/examples
调整连接器参数:
在 server.xml
中设置 maxThreads
、minSpareThreads
、acceptCount
和 compression
等参数,以优化并发处理能力和响应速度。
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="200" minSpareThreads="10" acceptCount="100" compression="on" compressionMinSize="2048"/>
JVM内存调优:
通过设置 JAVA_OPTS
环境变量来调整JVM的内存分配,如 -Xms
和 -Xmx
。
sudo nano /etc/environment
添加以下内容:
JAVA_OPTS="-Xms512M -Xmx1024M -server -XX:UseParallelGC"
启用NIO模式:
修改 server.xml
中的连接器节点,将协议改为 org.apache.coyote.http11.Http11NioProtocol
,以提高并发处理能力。
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="200" minSpareThreads="10" acceptCount="100" compression="on" compressionMinSize="2048"/>