tomcat常用配置,tomcat配置调优

  tomcat常用配置,tomcat配置调优

  2004-01-09 17:19:25

  作者:杰森布里泰因伊恩f达尔文

  资料来源:http://www.orielly.com

  译者:陈光

  2003-12-31

  编者按:开发Java Web应用、构建和部署Web内容是一项非常简单的工作。使用雅加达Tomcat作为Servlet和JSP容器的人已经遍布全球。Tomcat免费,跨平台等诸多特性,而且更新快,所以现在很受欢迎。

  你需要做的就是:根据你的需求配置Tomcat。只要配置正确,Tomcat一般都能满足你的需求。这里有一系列关于Tomcat的配置技巧。这些小技巧来源于我的书:《Tomcat权威指南》。希望他们能帮到你。杰森布里泰因——号

  1.配置系统管理(管理Web应用程序)

  大多数商业J2EE服务器都提供了强大的管理界面,并且大多数都采用了易于理解的Web应用程序界面。Tomcat也以自己的方式提供了一个成熟的管理工具,丝毫不逊色于那些商业竞争对手。Tomcat的Admin Web应用最早出现在4.1版本,当时的功能包括管理上下文、数据源、用户和组等。当然,还可以管理初始化参数、用户、组、角色等各种数据库管理。在后续版本中,这些功能会有很大的扩展,但是现有的功能已经很实用了。

  管理Web应用程序在自动部署文件中定义:catalina _ base/Web apps/admin . XML。

  (译者注:CATALINA_BASE是tomcat安装目录下的服务器目录)

  您必须编辑此文件,以确保上下文中的docBase参数是绝对路径。也就是说,catalina _ base/web apps/admin . XML的路径是绝对路径。或者,您可以删除这个自动部署文件,并在server.xml文件中创建一个Admin Web应用程序的上下文,效果是一样的。您不能管理管理Web应用程序。换句话说,除了删除catalina _ base/web apps/admin . XML,你大概什么也做不了。

  如果您使用userDatabaseRealm(默认),您将需要向catalina _ base/conf/Tomcat-users . XML文件添加一个用户和一个角色。编辑该文件并向其中添加一个名为“admin”的角色,如下所示:

  role name=admin/

  你还需要有一个用户,这个用户的角色是“admin”。像现有用户一样添加用户(更改密码以使其更安全):

  用户名=admin 密码=deep_dark_secret 角色=admin/

  当你完成这些步骤后,请重启Tomcat,访问http://localhost:8080/admin,你会看到一个登录界面。Admin Web应用采用基于容器管理的安全机制,采用Jakarta Struts框架。一旦您作为具有“admin”角色的用户登录到管理界面,您将能够使用这个管理界面配置Tomcat。

  2.配置应用程序管理(经理Web应用程序)

  管理Web应用程序允许您通过比管理Web应用程序更简单的用户界面来执行一些简单的Web应用程序任务。

  管理器Web应用程序是在自动部署文件中定义的:

  CATALINA _ BASE/web apps/manager . XML .

  您必须编辑该文件,以确保上下文的docBase参数是绝对路径,也就是说,catalina _ home/server/web apps/manager的绝对路径。

  (译者注:CATALINA_HOME是tomcat安装目录)

  如果您使用的是UserDatabaseRealm,那么您需要向catalina _ base/conf/Tomcat-users . XML文件添加一个角色和一个用户。接下来,编辑该文件并向其中添加一个名为“manager”的角色:

  role name="经理"

  您还需要有一个角色为“经理”的用户。像现有用户一样,添加一个新用户(更改密码以使其更安全):

  用户名=经理密码=deep_dark_secret 角色=经理/

  然后重启Tomcat,访问http://localhost/manager/list,你会看到一个简单的基于文本的管理界面,或者访问3358 localhost/manager/html/list,你会看到一个HMTL管理界面。不管怎样,您的经理Web应用程序现在已经启动了。

  管理应用程序允许您在没有系统管理权限的情况下安装新的Web应用程序进行测试。如果我们在/home/user/hello下有一个新的web应用程序,并希望将其安装在/hello下,为了测试这个应用程序,我们可以在第一个文件框中输入“/hello”作为访问路径,在第二个文本框中输入“file:/home/user/hello”作为配置URL。

  管理器还允许您停止、重新启动、删除和重新部署web应用程序。停止应用程序,使其不能被访问。当用户试图访问这个停止的应用程序时,他会看到一个503错误3354“503-这个应用程序目前不可用”。

  删除web应用程序仅仅意味着从Tomcat的运行副本中删除该应用程序。如果重启Tomcat,被删除的应用会再次出现(也就是说,删除并不意味着从硬盘中删除)。

  3.部署web应用程序

  在系统中部署web服务有两种方式。

  1将您的WAR文件或web应用程序文件夹(包括web的所有内容)复制到CATALINA _ BASE/web apps目录。

  2.为您的web服务创建一个XML片段文件,只包括上下文内容,并将该文件放在$CATALINA_BASE/webapps目录中。web应用程序本身可以存储在硬盘上的任何地方。

  如果你有一个WAR文件,如果你想部署它,你只需要简单的把它复制到CATALINA_BASE/webapps目录下,文件必须有”。战争”作为它的延伸。一旦Tomcat监听到这个文件,它就会(默认情况下)将其解包为一个子目录,并将WAR文件的名称作为子目录的名称。接下来,Tomcat将在内存中创建一个上下文,就像您在server.xml文件中创建它一样。当然,其他必要的内容将从server.xml中的DefaultContext获得

  部署web应用程序的另一种方法是编写一个上下文XML片段文件,然后将其复制到CATALINA_BASE/webapps目录。上下文片段不是一个完整的XML文件,而只是一个上下文元素和应用程序的相应描述。这个片段文件就像是从server.xml中裁剪出来的上下文元素,所以这个片段被命名为“上下文片段”。

  例如,如果我们要部署一个名为MyWebApp.war的应用程序,它使用realm作为访问控制方法,我们可以使用下面的片段:

  !-

  用于部署MyWebApp.war的上下文片段

  -

  上下文路径=/demo docBase= web apps/myweb app . war

  debug=0 privileged=true

  realm class name= org . Apache . catalina . realm . userdatabaserealm

  resourceName=UserDatabase/

  /上下文

  将该片段命名为“MyWebApp.xml ”,并将其复制到CATALINA_BASE/webapps目录中。

  这个上下文片段提供了一种部署web应用程序的便捷方式。您不需要编辑server.xml,除非您想要更改默认的部署特性,并且在安装新的web应用程序时不需要重新启动Tomcat。

  4.配置虚拟主机。

  只有在设置虚拟主机时,才需要修改server.xml中的元素“Host”。虚拟主机是一种在web服务器上为多个域名服务的机制。对于每个域名,似乎整个主机都是独占的。实际上,大多数小型商业网站都是由虚拟主机实现的,主要是因为虚拟主机可以直接连接到互联网并提供相应的带宽,以保证合理的访问响应速度,虚拟主机还可以提供稳定的固定IP。

  通过在域名服务器(DNS)上设置IP地址的别名,并告诉web服务器将对不同域名的请求分发到相应的web目录,可以在任何web服务器上设置基于名称的虚拟主机。因为这篇文章主要是关于Tomcat的,所以我们不打算介绍在各种操作系统上设置DNS的方法。如果你需要这方面的帮助,可以参考保罗艾尔比茨(Paul Al Bitz)和克丽克特刘(O Reilly)的书《DNS and Bind》。为了便于演示,我将使用静态主机文件,因为这是测试别名最简单的方法。

  要在Tomcat中使用虚拟主机,您需要设置DNS或主机数据。为了测试,为本地IP设置一个IP别名就足够了。接下来,您需要向server.xml添加几行代码,如下所示:

  服务器端口=8005 关闭=关闭调试=0

  服务名=Tomcat-Standalone

  连接器class name= org . Apache . coyote . Tomcat 4 . coyote connector

  port= 8080 min processors= 5 max processors= 75

  enable lookups= true redirect port= 8443 /

  连接器class name= org . Apache . coyote . Tomcat 4 . coyote connector

  port= 8443 min processors= 5 max processors= 75

  accept count= 10 debug= 0 scheme= https secure= true /

   factory class name= org . Apache . coyote . Tomcat 4 . coyoteserversocketfactory

  clientAuth=false 协议=TLS /

  /连接器

  引擎名称=独立默认主机=本地主机调试=0

  !-该主机是默认主机-

  主机名=localhost 调试=0 appBase=webapps

  un packwars= true auto deploy= true

  上下文路径= docBase=ROOT debug=0/

  上下文路径=/orders docBase=/home/Ian/orders debug= 0

  reloadable= true cross context= true

  /上下文

  /主机

  !-这个主机是第一个“虚拟主机”:www.example.com-

  主机名= www . example . com appBase=/home/example/web app

  上下文路径= docBase=。/

  /主机

  /引擎

  /服务

  /服务器

  Tomcat的server.xml文件,在初始状态下,只包含一个虚拟主机,但是可以很容易地扩展到支持多个虚拟主机。前面的示例显示了server.xml的简单版本,其中粗体部分用于添加虚拟主机。每个主机元素必须包括一个或多个上下文元素,其中一个必须是默认上下文,并且该默认上下文的显示路径应该为空(例如,path=" ")。

  5.配置基本身份验证。

  当用户访问受保护的web应用程序资源时,容器管理身份验证方法控制如何对用户进行身份验证。当一个web应用使用基本认证(基本参数在web.xml文件中的auto-method元素中设置),用户访问受保护的web应用时,Tomcat会通过HTTP基本认证弹出一个对话框,要求用户输入用户名和密码。在这种身份验证方法中,所有密码将以64位编码模式在网络上传输。

  注意:使用基本身份验证被认为是不安全的,因为它没有强加密方法,除非在客户端和服务器上都使用HTTPS或其他密码加密码方法(例如,在虚拟专用网络中)。如果没有额外的加密方法,网络管理员将能够截获(或滥用)用户的密码。但是,如果您刚刚开始使用Tomcat,或者您想在web应用程序中测试基于容器的安全管理,基本身份验证仍然非常容易设置和使用。只需在web应用程序的web.xml文件中添加两个元素security-constraint和login-config,并在catalina _ base/conf/Tomcat-users . XML文件中添加适当的角色和用户,然后重新启动Tomcat。

  下例中的web.xml取自一个俱乐部会员网站系统,其中只有会员目录受到保护,身份验证使用基本身份验证。请注意,该方法将有效地替换。Apache web服务器中的htaccess文件。

  !-

  通过定义以下内容来定义会员专用区域

  对该应用程序的“安全约束”,以及

  将它映射到我们想要的子目录(URL)

  来限制。

  -

  安全约束

  网络资源收集

  网络资源名称

  整个应用程序

  /web-resource-name

  URL-模式/成员/*/URL-模式

  /web-资源-收藏

  授权约束

  角色名成员/角色名

  /授权约束

  /安全约束

  !-定义此应用程序的登录配置-

  登录配置

  基本验证方法/验证方法

  领域名称我的俱乐部会员-仅区域/领域名称

  /登录配置

  6.配置单一登录。

  一旦设置了领域和身份验证方法,就需要进行实际的用户登录处理。一般来说,用户登录系统是很麻烦的。您必须尽量减少用户登录验证的次数。默认情况下,当用户第一次请求受保护的资源时,每个web应用程序都要求用户登录。如果您运行多个web应用程序,并且每个应用程序都需要单独的用户认证,这看起来有点像您在与您的用户进行斗争。用户不知道如何将多个分离的应用整合到一个系统中,所以不知道需要访问多少个不同的应用,但是又很困惑为什么总是登录。

  Tomcat 4的“单点登录”特性允许用户在访问同一虚拟主机下的所有web应用程序时只需登录一次。要使用此功能,您只需在主机上添加一个单点登录阀元素,如下所示:

  valve class name= org . Apache . catalina . authenticator . singlesignon

  debug=0/

  在Tomcat的初始安装之后,server.xml的注释包含了一个SingleSignOn Valve配置的示例。你只需要删除评论就可以使用了。然后,只要有任何用户登录了某个应用程序,它对同一虚拟主机下的所有应用程序都同样有效。

  使用单点登录阀有一些重要的限制:

  1值必须配置并嵌套在同一个Host元素中,所有需要单点身份验证(必须由context元素定义)的web应用程序都位于该主机下。

  包含共享用户信息的领域必须设置在同一级别的主机中或嵌套在外部。

  3不能被上下文中的领域覆盖。

  4使用单点登录的web应用最好使用Tomcat的内置认证方式(在web.xml中的auth-method中定义),这种方式比自定义认证方式更强。Tomcat的内置认证方法包括基本、摘要、表单和client-cert。

  5如果你使用单点登录,想在你的网站中集成一个第三方的web应用,而这个新的web应用使用的是自己的认证方式,而不是使用容器管理安全,那么你基本上就不要表白了。你的用户每次登录所有原来的应用都需要登录一次,当他们请求新的第三方应用的时候又要重新登录。当然,如果你有这个第三方web应用的源代码,并且你是程序员,你可以修改,但是恐怕不太好做。

  6单点登录需要cookies。

  7.配置定制的用户目录。

  有些网站允许个人用户在服务器上发布网页。例如,一所大学的学院可能希望为每个学生提供一个公共区域,或者一个ISP可能希望为他的客户提供一些web空间,但这不是虚拟主机。在这种情况下,典型的方法是在用户名前添加一个特殊字符(~)作为每个用户的网址,例如:

  http://www.cs.myuniversity.edu/~username

  http://members.mybigisp.com/~username

  Tomcat提供了两种在主机上映射这些个人网站的方法,主要使用一对特殊的侦听器元素。监听器的ClassName属性应该是org . Apache . catalina . startup . user config,userClass属性应该是几个映射类之一。如果您的系统是Unix,它将有一个标准的/etc/passwd文件。这个文件中的帐号可以很容易地被Tomcat在操作中读取。该文件指定用户的主目录,并使用PasswdUserDatabase映射类。

  侦听器class name= org . Apache . catalina . startup . user config

  directoryName=public_html

  用户/

  web文件需要放在像/home/users/ian/public_html或/users/jbuild/public _ html这样的目录中。当然,也可以将public_html更改为任何其他子目录。

  实际上,这个用户目录根本不必位于用户的主目录中。如果没有密码文件,但是希望将用户名映射到公共目录(如/home)的子目录中,可以使用HomesUserDatabase类。

  侦听器class name= org . Apache . catalina . startup . user config

  directory name= public _ html home base=/home

  用户/

  这样,web文件可以位于/home/ian/public_html或/home/jasonb/public_html这样的目录中。这种形式对Windows更有利。可以使用c:\home这样的目录。

  如果这些侦听器元素出现,它们必须在主机元素中,而不是在上下文元素中,因为它们都应用于主机本身。

  8.在Tomcat中使用CGI脚本

  Tomcat主要用作Servlet/JSP容器,但它也具有许多传统web服务器的性能。通用网关接口(CGI)就是其中之一。CGI提供了一组方法来运行一些扩展以响应浏览器的请求。CGI之所以被称为通用,是因为它可以在大多数程序或脚本中被调用,包括Perl、Python、awk、Unix shell脚本等等,甚至Java。当然,你可能不会以CGI的身份运行一个Java应用程序。毕竟这太原始了。一般来说,开发Servlet总是比CGI更高效,因为当用户点击一个链接或者一个按钮的时候,你不需要从操作系统层开始处理。

  Tomcat包括一个可选的CGI Servlet,允许您运行遗留的CGI脚本。

  为了使Tomcat能够运行CGI,您必须执行以下操作:

  1.将Servlet-cgi . rename tojar(在CATALINA _ HOME/server/lib/directory中)重命名为Servlet-CGI . jar处理CGI的Servlet应该位于Tomcat的类路径下。

  2.在Tomcat的CATALINA_BASE/conf/web.xml文件中,删除关于servlet-name CGI的段落的注释(默认情况下,该段落位于第241行)。

  3.同样,在Tomcat的CATALINA_BASE/conf/web.xml文件中,删除关于映射CGI的段落的注释(默认情况下,这一段在第299行)。请注意,这一段规定了如何访问CGI脚本的HTML链接。

  4.可以将CGI脚本放在WEB-INF/CGI目录下(注意WEB-INF是一个安全的地方,可以放一些出于安全考虑不希望被用户看到或者暴露的文件),也可以将CGI脚本放在上下文下的其他目录下,调整CGI Servlet的cgiPathPrefix的初始化参数。这指定了CGI Servlet的实际位置,并且不能与上一步中指定的URL同名。

  5.重启Tomcat,你的CGI就可以运行了。

  在Tomcat中,CGI程序默认放置在WEB-INF/cgi目录中。如前所述,WEB-INF目录是受保护的,它的内容无法通过客户端的浏览器窥探,因此它是放置包含密码或其他敏感信息的CGI脚本的一个非常好的地方。为了与其他服务器兼容,虽然你也可以将CGI脚本保存在传统的/cgi-bin目录中,但你要知道,这些目录中的文件可能会被互联网上好奇的冲浪者看到。此外,在Unix中,确保运行Tomcat的用户拥有执行CGI脚本的权限。

  9.更改Tomcat中的JSP编译器

  在Tomcat 4.1(或者更高版本,可能)中,JSP的编译是由Tomcat中包含的Ant程序控制器直接执行的。这听起来有点奇怪,但这正是Ant的意图的一部分。有一个API文档指导开发人员不用启动新的JVM就可以使用Ant。这是使用Ant进行Java开发的一大优势。此外,这还意味着您现在可以在Ant中使用javac支持的任何编译方法。下面是关于Apache Ant用户手册的javac页面列表。很好用,因为只需要在init-param元素中定义一个名为“compiler”的名字,值中就有一个支持编译的编译器名。示例如下:

  小型应用程序

  servlet-name jsp /servlet-name

  servlet类

  org . Apache . jasper . servlet . JSP servlet

  /servlet-class

  初始化参数

  param-name logverbositoylevel/param-name

  参数值警告/参数值

  /init-param

  初始化参数

  param-name编译器/param-name

  参数值jikes/参数值

  /init-param

  启动时加载3/启动时加载

  /servlet

  当然,给定的编译器必须已经安装在您的系统中,并且可能需要设置类路径,这取决于您选择的编译器。

  10.限制对特定主机的访问。

  有时,您可能希望限制对Tomcat web应用程序的访问。例如,您希望只有您指定的主机或IP地址才能访问您的应用程序。这样,只有那些指定的客户端可以访问服务的内容。为了达到这个效果,Tomcat提供了两个参数供您配置:RemoteHostValve和RemoteAddrValve。

  通过配置这两个参数,您可以从请求中过滤主机或IP地址,并允许或拒绝哪些主机/IP。类似地,Apache的httpd文件中的每个目录都有allow/deny规范。

  例如,您可以将管理Web应用程序设置为仅允许本地访问,设置如下:

  上下文路径=/path/to/secret_files .

   valve class name= org . Apache . catalina . valves . remoteaddrvalve

  allow=127.0.0.1 deny=/

  /上下文

  如果未指定允许的主机,则与拒绝的主机匹配的主机将被拒绝,而其他主机都被允许。同样,如果您不指定拒绝的主机,那么与允许的主机匹配的主机将被允许,而所有其他主机将被拒绝。

  -

  作者介绍:

  杰森布里泰因是CollabNet公司的高级软件工程师,主要负责软件基础设施的开发。他为Apache Jakarta项目做出了许多贡献,并且多年来一直是一名活跃的开源软件开发人员。

  Ian Darwin已经在计算机行业工作了30年:他在1980年开始使用Unix,1995年使用Java,1998年使用OpenBSD。他是两本Oreilly书籍的作者:用lint检查C程序和Java Cookbook。他还与杰森布里泰因合著了《雄猫:权威指南》。

  译者简介:

  Holen Chen是的一名项目经理,熟悉知识管理和电子政务。致力于Apache雅加达项目在中国的推广和深度应用。他可以通过holen@263.net与作者联系。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: