如何在Ubuntu 14.04上优化Tomcat安装

介绍

Tomcat是Java Servlet和JavaServer Pages技术的流行实现。它由Apache Software Foundation根据流行的Apache开源许可证发布。其强大的功能,有利的许可证和优秀的社区使其成为最好和最受欢迎的Java servlet之一。

Tomcat安装后几乎总是需要额外的微调。阅读本文以了解如何优化Tomcat安装,以便安全有效地运行。

准备

本指南已在Ubuntu 14.04上测试过。所描述的安装和配置在其他OS或OS版本上类似,但配置文件的命令和位置可能不同。

在本教程中,您将需要:

  • 一台已经设置好可以使用sudo命令的非root账号的Ubuntu服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器
  • 安装和配置Tomcat

本教程中的所有命令都应以非root用户身份运行。如果命令需要root访问权限,则前面会有sudo

在标准HTTP端口上提供请求

您可能已经注意到,Tomcat默认侦听TCP端口8080。此默认端口主要是因为Tomcat在非特权用户下运行tomcat7。在Linux中,除非另行配置,否则只允许特权用户如root监听1024以下的端口。因此,您不能简单地将Tomcat的侦听器端口更改为80(HTTP)。

因此,优化Tomcat安装的第一项任务是解决上述问题并确保您的Tomcat Web应用程序在标准HTTP端口上可用。

解决此问题的最简单方法(但不一定是最好的方法)是创建防火墙(iptables) - 从TCP端口80转发到TCP端口8080.这可以通过以下iptables命令完成:

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

要删除此iptables规则,您只需将-A标志替换为添加规则,并-D在上面的命令中删除规则,如下所示:

sudo iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

从安全性或性能的角度来看,这种简单的流量转发不是最佳的。相反,一个好的做法是在Tomcat之前添加一个Web服务器,例如Nginx。原因是Tomcat只是一个具有Web服务器基本功能的Java servlet,而Nginx是一个典型的,功能强大,功能齐全的Web服务器。以下是使用Nginx作为前端服务器的一些重要好处:

  • Nginx比Tomcat更安全,可以有效地保护它免受各种攻击。在紧急安全更新的情况下,更新前端Nginx Web服务器要比担心与Tomcat升级相关的停机时间和兼容性问题更容易,更快速,更安全。
  • Nginx通过更好地支持静态内容,缓存和SSL,更有效地为HTTP和HTTPS流量提供服务。
  • Nginx很容易配置为侦听任何端口,包括80和443。

如果确信上述好处,那么首先确保已删除以前的iptables规则,然后使用以下命令安装Nginx:

sudo apt-get install nginx

之后,使用您喜欢的编辑器编辑Nginx的默认服务器块配置(/etc/nginx/sites-enabled/default),如下所示:

sudo nano /etc/nginx/sites-enabled/default

查找该location /部分,该部分指定应如何提供所有请求,并确保它看起来像这样:

location / {
    proxy_pass http://127.0.0.1:8080/;
}

上述proxy_pass指令意味着所有请求都应转发到Tomcat侦听的TCP端口8080上的本地IP 127.0.0.1。关闭文件,然后使用以下命令重新启动Nginx:

sudo service nginx restart

之后,尝试通过浏览器中标准HTTP端口连接到Droplet的IP来访问Tomcat。URL应该是http://your_droplet's_ip这样的。如果一切正常,应该打开Tomcat的默认页面。如果没有,请确保已删除iptables规则,并且已根据本文的先决条件正确安装了Tomcat。

保护Tomcat

保护Tomcat可能是经常被忽视的最重要的任务。幸运的是,只需几步即可获得相当安全的Tomcat设置。要按照本文的这一部分进行操作,您应该在Tomcat前面安装和配置Nginx,如前所述。

删除管理Web应用程序

功能和安全性之间的通常权衡对Tomcat也是有效的。要提高安全性,可以删除默认Web管理器和主机管理器应用程序。这将是不方便的,因为您必须从命令行执行所有管理,包括Web应用程序部署。

删除Tomcat的Web管理工具有利于提高安全性,因为您不必担心有人可能会滥用它们。这种良好的安全措施通常适用于生产现场。

管理Web应用程序包含在Ubuntu的tomcat7-admin包中。因此,要删除它们,请运行以下命令:

sudo apt-get remove tomcat7-admin

限制对管理Web应用程序的访问

如果您没有按照上一部分中的建议删除管理Web应用程序,那么我们至少可以限制对它们的访问。他们的网址应该是http://your_servlet_ip/manager/http://your_servlet_ip/host-manager/。如果您在这些URL上看到404 Not Found错误,则表示它们已被删除,您无需执行任何操作。您仍然可以阅读以下说明,了解如何继续使用您可能希望保护的其他敏感资源。

此时,Nginx正在接受端口80上的连接,以便您可以从任何地方访问http://your_servlet_ip所有Web应用程序。同样,Tomcat在全局范围内侦听端口8080,http://your_servlet_ip:8080那里可以找到相同的应用程序。为了提高安全性,我们将通过Nginx限制端口80上的可用资源。我们还将使Tomcat及其暴露的端口8080仅在本地可用于服务器和Nginx。

打开默认服务器块配置文件/etc/nginx/sites-enabled/default

sudo nano /etc/nginx/sites-enabled/default

server_name指令之后但是在默认根位置(location /)之上添加以下内容并替换your_local_ip为本地计算机的IP地址:

...
location /manager/ {
    allow your_local_ip;
    deny all;
    proxy_pass http://127.0.0.1:8080/manager/;
}
...

您应该对主机管理器应用程序应用相同的限制,方法是添加另一个配置块,其中manager替换为host-manager这样(再次,用您的本地IP地址替换your_local_ip):

...
location /host-manager/ {
    allow your_local_ip;
    deny all;
    proxy_pass http://127.0.0.1:8080/host-manager/;
}
...

一旦你重新启动Nginx的,访问managerhost-manager网络环境将仅限于本地IP地址:

sudo service nginx restart

您可以通过在浏览器中打开测试http://your_servlet_ip/manager/http://your_servlet_ip/host-manager/。应用程序应该可用,但如果您尝试使用公共代理或其他计算机访问相同的URL,则应该看到403 Forbidden错误。

此外,作为额外措施,您还可以使用以下命令删除Tomcat的文档和示例:

sudo apt-get remove tomcat7-docs tomcat7-examples

请注意,Tomcat仍然在TCP端口8080上侦听外部连接。因此,可以轻松绕过Nginx及其安全措施。要解决此问题,请将Tomcat配置为仅侦听本地接口127.0.0.1。为此,使用您喜欢的编辑器打开/etc/tomcat7/server.xml文件:

sudo nano /etc/tomcat7/server.xml

添加address="127.0.0.1"Connector配置部分是这样的:

...
<Connector address="127.0.0.1" port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    URIEncoding="UTF-8"
    redirectPort="8443" />
...

之后重启Tomcat以使新设置生效:

sudo service tomcat7 restart

执行上述步骤可确保您具有良好的基本安全级别。

微调JVM设置

当然,通用Java虚拟机(JVM)微调原则也适用于Tomcat。虽然JVM调优本身就是一门科学,但有一些基本的,良好的实践,任何人都可以轻松应用:

  • 最大堆大小Xmx是Tomcat可以使用的最大内存。它应设置为一个值,为Droplet本身运行留下足够的可用内存以及Droplet上可能具有的任何其他服务。例如,如果你的Droplet有2 GB的RAM,那么为xmx分配1GB的RAM可能是安全的。但是,请记住Tomcat使用的实际内存将略大于Xmx
  • 最小堆大小Xms是启动时分配的内存量。在大多数情况下,它应该等于xmx值。因此,您将避免运行昂贵的内存分配过程,因为分配的内存的大小将始终保持不变。
  • 永久存储类的内存MaxPermSize应允许Tomcat加载应用程序的类,并从Xmx实例化这些类的值中留下备用内存。如果您不确定应用程序类需要多少内存,那么您可以将其设置为开头MaxPermSize大小的一半Xmx- 在我们的示例中为512 MB。

在Ubuntu 14.04上,您可以通过编辑/etc/default/tomcat7文件来自定义Tomcat的JVM选项。因此,要应用上述提示,请使用您喜欢的编辑器打开此文件:

sudo nano /etc/default/tomcat7

如果您已遵循先决条件中的Tomcat安装说明,则应找到以下行:

...
JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Xmx512m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC"
...

如果您的Droplet具有2 GB的RAM并且您希望为Tomcat分配大约1 GB,则此行应更改为:

...
JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Xms1024m -Xmx1024m -XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC"
...

要使此设置生效,您必须重新启动Tomcat:

sudo service tomcat7 restart

上面的JVM配置是一个很好的开始,但您应该监视Tomcat的log(/var/log/tomcat7/catalina.out)以查找问题,尤其是在重新启动Tomcat或进行部署之后。要监视日志,请使用以下tail命令:

sudo tail -f /var/log/tomcat7/catalina.out

如果您对于tail来说是新用户,则必须按Ctrl-C键盘上的组合键才能停止拖尾日志。

搜索错误如OutOfMemoryError。这样的错误表明您必须调整JVM设置,更具体地说,增加Xmx大小。

结论

而已!现在,您只需几个易于遵循的步骤即可保护和优化Tomcat。建议进行这些基本优化,不仅适用于生产,甚至适用于暴露于Internet的测试和开发环境。

更多Ubuntu教程请前往腾讯云+社区学习更多知识。

参考文献:《How To Optimize Your Tomcat Installation on Ubuntu 14.04》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏增长技术

Android Debug Bridge

Android Debug Bridge,Android调试桥接器,简称adb,是用于管理模拟器或真机状态的万能工具, 采用了客户端-服务器模型,包括三个部分:

2562
来自专栏守望轩

Visual Studio 2008 每日提示(二十九)

#291、启动时没有用户代码发出警告 原文链接:What warning message is suppressed by the Warn If No Us...

3855
来自专栏梦魇小栈

Linux常用命令笔记

sudo vim /etc/nginx/sites-available/default

1261
来自专栏假装我会写代码

简单轻松部署你的项目 - Deployer

1493
来自专栏Java学习123

windows下搭建Ruby(基于eclipse的环境)开发环境

2954
来自专栏一个爱瞎折腾的程序猿

jenkins在windows服务器上执行含git push命令的脚本权限不足的解决方法

2662
来自专栏jmeter高手高高手

JMeter(十四)-自动生成测试报告

1:在你的脚本文件路径下,执行cmd命令:jmeter -n -t test.jmx -l result.jtl -e -o /tmp/ResultReport...

1854
来自专栏JavaEdge

Spring Security 实战 - Spring Security OAuth2项目准备

1412
来自专栏闵开慧

tomcat里面的文件详细说明

如何安装tomcat服务器   安装Tomcat之前要先安装JDK,可从http://java.sun.com上下载最新版本的JDK。 Tomcat可从Apac...

40710
来自专栏云计算教程系列

如何在Ubuntu 14.04服务器上设置Chef 12配置管理系统

随着基础架构需求的扩展,手动管理每台服务器变得越来越困难。这种困难因重复性要求而变得复杂,如果节点出现故障或需要水平缩放,则需要再现性。

950

扫码关注云+社区

领取腾讯云代金券