tomcat优化
参考文档:
http://nolinux.blog.51cto.com/4824967/1608940
11.1隐藏版本号tomcat
为了避免黑客针对某些版本进行攻击,因此我们需要隐藏或者伪装 Tomcat 的版本信息。
默认 Tomcat 的版本信息如下:
mkdir -p org/apache/catalina/util
cd org/apache/catalina/util
vim ServerInfo.properties
[root@tomcat01 util]# cat /aliyun/tomcat7/lib/org/apache/catalina/util/ServerInfo.properties
server.info=nolinux
11.2优化 web.xml
1.站点默认主页
[root@tomcat01 conf]# cat -n /aliyun/tomcat7/conf/web.xml|sed -n ‘4677,4681p’
4677 <welcome-file-list>
4678 <welcome-file>index.html</welcome-file>
4679 <welcome-file>index.htm</welcome-file>
4680 <welcome-file>index.jsp</welcome-file>
4681 </welcome-file-list>
2.自定义错误页面
[root@tomcat01 manager]# cat -n /aliyun/tomcat7/webapps/manager/WEB-INF/web.xml|sed -n ‘195,206p’
195 <error-page>
196 <error-code>401</error-code>
197 <location>/WEB-INF/jsp/401.jsp</location>
198 </error-page>
199 <error-page>
200 <error-code>403</error-code>
201 <location>/WEB-INF/jsp/403.jsp</location>
202 </error-page>
203 <error-page>
204 <error-code>404</error-code>
205 <location>/WEB-INF/jsp/404.jsp</location>
206 </error-page>
3.session会话默认超时时间为30 分钟
[root@tomcat02 conf]# cat -n /aliyun/tomcat7/conf/web.xml|sed -n ‘584,586p’
584 <session-config>
585 <session-timeout>30</session-timeout>
586 </session-config>
4.禁止列目录
[root@tomcat02 conf]# cat -n /aliyun/tomcat7/conf/web.xml|sed -n ‘110,113p’
110 <init-param>
111 <param-name>listings</param-name>
112 <param-value>false</param-value>
113 </init-param>
默认是禁止的列目录
11.3优化
tomcat-user.xml
该文件含有用户名、角色以及密码的清单文件。负责提供webapps下manager项目的登录认证管理。在生产环境中,我们需要将该文件全部注释。或者直接把该文件删掉
注释效果如下:
[root@tomcat02 conf]# cat -n /aliyun/tomcat7/conf/tomcat-users.xml|sed -n ‘29,36p’
29 <!–
30 <role rolename=“tomcat”/>
31 <role rolename=“role1”/>
32 <user username=“tomcat” password=“tomcat” roles=“tomcat”/>
33 <user username=“both” password=“tomcat” roles=“tomcat,role1”/>
34 <user username=“role1” password=“tomcat” roles=“role1”/>
35 -->
36 </tomcat-users>
11.4优化server.xml文件
Tomcat的主配置文件,该文件中包含很多主要元素,比如Service、Connector、Host等,这些元素都会创建软件"对象"、排序及进程管道中设置的这些元素嵌套方,使我们可以执行过滤、分组等工作。
如果要对改文件做优化,我们需要先了解该文件的结构!
server.xml的结构图:
<Server>
<Listener />
<GlobaNamingResources>
</GlobaNamingResources
<Service>
<Connector />
<Engine>
<Logger />
<Realm />
<host>
<Logger />
<Context />
</host>
</Engine>
</Service>
</Server>
针对该文件,我们需要优化的点有如下:
1、maxThreads 连接数限制
这里还需要注意的一点是,tomcat 和 php 不同。php可以按照cpu和内存的情况去配置连接数,上万很正常。而 java 还需要注意 jvm 的参数配置。如果不注意就会因为jvm参数过小而崩溃。
2、多虚拟主机
3、压缩传输(未做优化)
tomcat作为一个应用服务器,也是支持 gzip 压缩功能的。我们可以在 server.xml 配置文件中的 Connector 节点中配置如下参数,来实现对指定资源类型进行压缩。
提示:
compression=“on” # 打开压缩功能
compressionMinSize=“50” # 启用压缩的输出内容大小,默认为2KB
noCompressionUserAgents=“gozilla, traviata” # 对于以下的浏览器,不启用压缩
compressableMimeType=“text/html,text/xml,text/javascript,text/css,text/plain” # 哪些资源类型需要压缩
Tomcat 的压缩是在客户端请求服务器对应资源后,从服务器端将资源文件压缩,再输出到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的浏览过程 HTML、CSS、Javascript和Text,它可以节省40% 左右的流量。更为重要的是,它可以对动态生成的,包括CGI、PHP、JSP、ASP、Servlet,SHTML等输出的网页也能进行压缩,压缩效率也 很高。但是,压缩会增加 Tomcat 的负担,因此最好采用Nginx + Tomcat 或者 Apache + Tomcat 方式,将压缩的任务交由 Nginx/Apache 去做。
4、管理AJP端口
AJP是为 Tomcat 与 HTTP 服务器之间通信而定制的协议,能提供较高的通信速度和效率。如果tomcat前端放的是apache的时候,会使用到AJP这个连接器。由于我们公司前端是由nginx做的反向代理,因此不使用此连接器,因此需要注销掉该连接器。
8009端口是tomcat和apache的mod_proxy_ajp,mod_jk沟通的端口,没用到就关了。
<!–
<Connector port=“8009” protocol=“AJP/1.3” redirectPort=“8443” />
–>
我们也可以不注释该代码,可以修改端口8009为其他端口
5.telnet管理端口保护、更改关闭 Tomcat 实例的指令(强制)
server.xml中定义了可以直接关闭 Tomcat 实例的管理端口。我们通过 telnet 连接上该端口之后,输入 SHUTDOWN (此为默认关闭指令)即可关闭 Tomcat 实例(注意,此时虽然实例关闭了,但是进程还是存在的)。由于默认关闭 Tomcat 的端口和指令都很简单。默认端口为8005,指令为SHUTDOWN 。因此我们需要将关闭指令修改复杂一点。
当然,在新版的 Tomcat 中该端口仅监听在127.0.0.1上,因此大家也不必担心。除非黑客登陆到tomcat本机去执行关闭操作。
修改实例:
<Server port=“8052” shutdown=“www.ecs.123”>
6.更改 Tomcat 的服务监听端口(未做优化)
一般公司的 Tomcat 都是放在内网的,因此我们针对 Tomcat 服务的监听地址都是内网地址。
修改实例:
<Connector port=“8080” address=“10.24.189.119” />(这样在浏览器就不显示了相关页面了)
7.优化tomcat配置文件server.xml
在配置文件中找到Connector port=“8080”,然后做如下修改:
<Connector port=“8080” protocol=“org.apache.coyote.http11.Http11NioProtocol”
connectionTimeout=“20000”
redirectPort=“8443”
URIEncoding=“UTF-8”
enableLookups=“false”
acceptCount=“50”
minProcessors=“20”
maxProcessors=“150”
maxThreads=“300”
minSpareThreads=“25”
maxSpareThreads=“75” />
参数详解:
7.1connnectionTimeout:
网络连接超时,默认值20000,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒
7.2redirectPort:
如果Connector支持非SSL请求,在收到一个要求使用SSL传输的请求以后,Catalina会自动将该请求重定向到这里指定的端口号。
7.3enableLookups:
是否反查域名,默认值为true。为了提高处理能力,应设置为false
7.4acceptCount:
指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。默认值10。
7.5minProcessors:
最小空闲连接线程数,用于提高系统处理性能,默认值为10
7.6maxProcessors:
最大连接线程数,即:并发处理的最大请求数,默认值为75
7.7maxThreads:
Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。默认值150。可以根据机器的时期性能和内存大小调整,一般可以在400-500。最大可以在800左右。
7.8minSpareThreads:
Tomcat初始化时创建的线程数。默认值4。
7.9maxSpareThreads:
一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值50。
7.10URIEncoding:
URI编码用于解码字节字符的格式,显示中文,使用UTF-8即可。
disableUploadTimeout:禁用上传超时时间
11.5禁用tomcat的管理页面
我们线上是不使用 Tomcat 默认提供的管理页面的,因此都会在初始化的时候就把这些页面删掉。这些页面是存放在 Tomcat 安装目录下的webapps目录下的。
我们只需要删除该目录下的所有文件即可。
当然,还有涉及管理页面的2个配置文件 host-manager.xml 和 manager.xml 也需要一并删掉。这两个文件存放在 Tomcat 安装目录下的conf/Catalina/localhost目录下。
移走tomcat的管理页面文件
[root@tomcat04 webapps]# ll /data/test001/tomcat_webapps.ori/
总用量 20
drwxr-xr-x 14 root root 4096 4月 7 18:13 docs
drwxr-xr-x 7 root root 4096 4月 7 18:13 examples
drwxr-xr-x 5 root root 4096 4月 7 18:13 host-manager
drwxr-xr-x 5 root root 4096 4月 7 18:13 manager
drwxr-xr-x 3 root root 4096 5月 10 15:50 ROOT
11.6用普通用户启动 Tomcat
为了进一步安全,我们不建议使用 root 来启动 Tomcat。这边建议使用专用用户 tomcat 或者 nobody 用户来启动 Tomcat 。在启动之前,需要对我们的tomcat 安装目录下所有文件的属主和属组都设置为指定用户。
useradd tomcat
passwd tomcat
/aliyun/tomcat7/bin/shutdown.sh
ss -lntup|grep java
cd /aliyun/tomcat7/
chown -R tomcat bin
chown -R tomcat logs
chown -R tomcat conf
chown -R tomcat /aliyun/tomcat7/webapps
chmod +u bin
chmod +u conf
chmod u+x logs
su - tomcat
password: Redhamr3.1415926
$ /aliyun/tomcat7/bin/startup.sh
ss -lntup|grep java
$ /aliyun/tomcat7/bin/shutdown.sh
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求