天天看点

tomcat优化

参考文档:

<a href="http://nolinux.blog.51cto.com/4824967/1608940">http://nolinux.blog.51cto.com/4824967/1608940</a>

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 &lt;welcome-file-list&gt;

4678 &lt;welcome-file&gt;index.html&lt;/welcome-file&gt;

4679 &lt;welcome-file&gt;index.htm&lt;/welcome-file&gt;

4680 &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;

4681 &lt;/welcome-file-list&gt;

2.自定义错误页面

[root@tomcat01 manager]# cat -n /aliyun/tomcat7/webapps/manager/WEB-INF/web.xml|sed -n '195,206p'

195 &lt;error-page&gt;

196 &lt;error-code&gt;401&lt;/error-code&gt;

197 &lt;location&gt;/WEB-INF/jsp/401.jsp&lt;/location&gt;

198 &lt;/error-page&gt;

199 &lt;error-page&gt;

200 &lt;error-code&gt;403&lt;/error-code&gt;

201 &lt;location&gt;/WEB-INF/jsp/403.jsp&lt;/location&gt;

202 &lt;/error-page&gt;

203 &lt;error-page&gt;

204 &lt;error-code&gt;404&lt;/error-code&gt;

205 &lt;location&gt;/WEB-INF/jsp/404.jsp&lt;/location&gt;

206 &lt;/error-page&gt;

3.session会话默认超时时间为30 分钟

[root@tomcat02 conf]# cat -n /aliyun/tomcat7/conf/web.xml|sed -n '584,586p'

584 &lt;session-config&gt;

585 &lt;session-timeout&gt;30&lt;/session-timeout&gt;

586 &lt;/session-config&gt;

4.禁止列目录

[root@tomcat02 conf]# cat -n /aliyun/tomcat7/conf/web.xml|sed -n '110,113p'

110 &lt;init-param&gt;

111 &lt;param-name&gt;listings&lt;/param-name&gt;

112 &lt;param-value&gt;false&lt;/param-value&gt;

113 &lt;/init-param&gt;

默认是禁止的列目录

11.3优化

tomcat-user.xml

该文件含有用户名、角色以及密码的清单文件。负责提供webapps下manager项目的登录认证管理。在生产环境中,我们需要将该文件全部注释。或者直接把该文件删掉

注释效果如下:

[root@tomcat02 conf]# cat -n /aliyun/tomcat7/conf/tomcat-users.xml|sed -n '29,36p'

29 &lt;!--

30 &lt;role rolename="tomcat"/&gt;

31 &lt;role rolename="role1"/&gt;

32 &lt;user username="tomcat" password="tomcat" roles="tomcat"/&gt;

33 &lt;user username="both" password="tomcat" roles="tomcat,role1"/&gt;

34 &lt;user username="role1" password="tomcat" roles="role1"/&gt;

35 --&gt;

36 &lt;/tomcat-users&gt;

11.4优化server.xml文件

Tomcat的主配置文件,该文件中包含很多主要元素,比如Service、Connector、Host等,这些元素都会创建软件"对象"、排序及进程管道中设置的这些元素嵌套方,使我们可以执行过滤、分组等工作。

如果要对改文件做优化,我们需要先了解该文件的结构!

server.xml的结构图:

&lt;Server&gt;

&lt;Listener /&gt;

&lt;GlobaNamingResources&gt;

&lt;/GlobaNamingResources

&lt;Service&gt;

&lt;Connector /&gt;

&lt;Engine&gt;

&lt;Logger /&gt;

&lt;Realm /&gt;

&lt;host&gt;

&lt;Context /&gt;

&lt;/host&gt;

&lt;/Engine&gt;

&lt;/Service&gt;

&lt;/Server&gt;

针对该文件,我们需要优化的点有如下:

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沟通的端口,没用到就关了。

我们也可以不注释该代码,可以修改端口8009为其他端口 5.telnet管理端口保护、更改关闭 Tomcat 实例的指令(强制) server.xml中定义了可以直接关闭 Tomcat 实例的管理端口。我们通过 telnet 连接上该端口之后,输入 SHUTDOWN (此为默认关闭指令)即可关闭 Tomcat 实例(注意,此时虽然实例关闭了,但是进程还是存在的)。由于默认关闭 Tomcat 的端口和指令都很简单。默认端口为8005,指令为SHUTDOWN 。因此我们需要将关闭指令修改复杂一点。 当然,在新版的 Tomcat 中该端口仅监听在127.0.0.1上,因此大家也不必担心。除非黑客登陆到tomcat本机去执行关闭操作。 修改实例: 6.更改 Tomcat 的服务监听端口(未做优化) 一般公司的 Tomcat 都是放在内网的,因此我们针对 Tomcat 服务的监听地址都是内网地址。 修改实例: (这样在浏览器就不显示了相关页面了) 7.优化tomcat配置文件server.xml 在配置文件中找到Connector port="8080",然后做如下修改: 参数详解: 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

 本文转自 wjw555 51CTO博客,原文链接:http://blog.51cto.com/wujianwei/2056457