设为首页 收藏本站
查看: 452|回复: 0

[经验分享] tomcat配置参考

[复制链接]

尚未签到

发表于 2017-1-19 07:47:42 | 显示全部楼层 |阅读模式
Tomcat服务器配置参考
Host容器


概述
Host元素代表一个虚拟主机,虚拟主机将服务器的网络名(比如www.mycompany.com)和运行Catalinade的某个特定服务器联系起来。为了生效,网络名称必须在管理你所在的Internet域的DNS服务器进行登记---请联系你的网络管理员。

在许多情况下,系统管理员可能希望为同一个虚拟主机或应用关联多个网络名称(比如www.mycompany.com和company.com)。这可以利用下面讨论的Host Name Alias特征来完成。

在Engine元素中可以嵌套一个或多个Host元素。在Host元素中可以嵌套context元素。在与每个Engine相关联的所有Host中,必须有一个Host的名称与Engine的defaultHost属性匹配。

以下的描述使用变量$CATALINA_HOME来指Tomcat 5安装的目录。大多数的相对路径都是以该目录为基准。但是,通过设置CATALINA_BASE目录,可以运行多个Tomcat 5实例,这时你应该使用$CATALINA_BASE来作为目录基准,而不是使用$CATALINA_HOME。

属性
公共属性
所有Host的实现必须支持如下属性:

属性描述
appBase
虚拟主机的Applicaton Base目录。这是在该虚拟主机上发布web应用的目录路径。你可以指定绝对路径,或者使用相对于$CATALINA_HOME的路径。有关web应用的自动识别和发布的更多信息,请参考应用自动发布。

autoDeploy
这个标志表示,在Tomcat运行的时候,放到appBase目录下的新的web应用是否自动发布。缺省为true。这方面的更多信息参考应用自动发布

backgroundProcessorDelay
这个值代表在该host及其子容器(包括所有的wrappers)上调用backgroundProcess方法的延时,以秒为单位。如果延时值非负,子容器不会被调用,这意味着子容器使用自己的处理线程。如果该值为正,会创建一个新的线程。在等待指定的时间以后,该线程在Host及其子容器上调用backgroundProcess方法。Host使用后台处理进行与web应用实时发布有关的操作。如果没有指定,缺省值是-1,说明host依赖其所属的Engine的后台处理。

className
实现的Java类名。该类必须实现org.apache.catalina.Host接口。如果没有指定,使用标准实现(在下面定义)

deployOnStartup
这个标志表明这个host的web应用是否由host configurator 自动发布。缺省为true。这方面的更多信息参考自动应用发布。

name
虚拟主机的网络名称,也就是在DNS服务器上注册的名称。嵌套在Engine的所有Host中,必须有一个Host的名字与Engine的defaultHost属性相同。如果想为同一个虚拟主机指定多个网络名称,参考主机名别名。



标准实现
Host的标准实现是org.apache.catalina.core.StandardHost。它还支持如下的附加属性

属性描述
debug
与Engine相关联的Logger的调试信息的详细程度。数字越大,输出越详细。如果没有指定,缺省值为0。

deployXML
如果不想使用Context XML配置文件来发布web应用,设为false。同时也失去了利用manager应用程序安装web应用或者“.war”文件的能力(这些web应用或.war文件不在Host的配置基准目录$CATALINA_HOME/conf/[engine_name]/[host_name]下面)

web应用使用catalina的安全许可发布,如果需要让不可信的用户管理web应用,这个值可以设为false。缺省为true。

errorReportValveClass
Host使用的错误报告valve的Java类名。这个valve的责任是输出错误报告。设置这个值可以定制Tomcat产生的错误页面的格式。这个类必须实现org.apache.catalina.Valve接口。如果没有指定,使用缺省值

og.apache.catalina.valvees.ErrorReportValve.

unpackWARs
如果希望将位于appBase目录下的WAR文件解压缩成对应的目录结构,设为true。如果希望直接从WAR文件运行web应用,设为false。更多信息参考应用自动发布。

workDir
Host的web应用使用的临时目录的路径。每个应用都有自己的子目录,用于临时的读写。如果在Context中设置了workDir属性,它将会覆盖Host的workDir属性。如Servlet Specification中所述,通过servlet context的属性javax.servlet.context.tempdir,这个目录可以被servlet使用。如果没有指定,使用$CATALINA_HOME/work下面的合适的目录。

嵌套组件
可以在Host元素中嵌套一个或者多个Context元素,每个Context元素代表这个虚拟主机下的一个不同的web应用。同时,你可以嵌套一个DefaultContext元素,用来定义后续发布的web应用的缺省值

可以在Host元素中选择嵌套一个DefaultContext元素,用来定义自动发布的web应用的缺省特性。

下列元素可以嵌套在Host元素中,但至多只能嵌套一个实例:

Logger - 配置一个logger,用来接收和处理Host的所有日志消息,以及这个Host的所有Context的日志消息(除非被低一级的Logger配置覆盖)
Realm -配置一个realm,Realm的用户数据库以及用户角色被这个Host的所有Context共享(除非被低一级的Realm配置覆盖)
专有特征
访问日志
正常情况下,运行web服务器会生成访问日志。访问日志以标准格式为每个请求输出一行信息。Catalina包含一个可选的Valve实现,可以用标准格式生成日志,还可以使用任意定制的格式。

通过在Engine,Host或者Context中嵌套一个Valve元素,Catalina会为该容器处理的所有请求创建访问日志,如下所示:



<Host name="localhost" ...>
  ...
  <Valve className="org.apache.catalina.valves.AccessLogValve"
         prefix="localhost_access_log." suffix=".txt"
         pattern="common"/>
  ...
</Host>


参考Access Log Valve,以获得更多配置属性的信息;
应用自动发布
如果使用标准的Host实现,当Catalina第一次启动时,如果deployOnStartup属性为true,tomcat会自动采取如下的步骤:

假定$CATALINA_HOME/conf/[engine_name]/[host_name]目录中的任何XML文件都包含一个Context元素(以及它的相关的子元素),通常情况下,这个<Context>的docBase属性指向一个web应用目录的绝对路径,或者是WAR文件的绝对路径。
如果WAR文件对应的目录不存在,则这个WAR文件会被自动展开,除非unpackWARs属性设为false。在重新发布更新后的WAR文件时,重新启动Tomcat之前一定要删除展开后的目录,这样更新后的WAR文件才会被重新展开(如果使能了auto deployer,它会自动完成这项工作)
application base目录下的任何子目录,如果包含/WEB-INF/web.xml文件,Tomcat认为这个一个展开后的web应用,会为这个目录自动产生一个Context元素,即使这个目录没有在conf/server.xml文件中出现。产生的Context会使用DefaultContext中的属性来配置。自动产生的Context的context路径是“/”后面跟上目录名,除非目录名是ROOT,这种情况下context路径是空字符串(“”);
除了启动时候的自动发布以外,在Tomcat运行的时候,当新的XML 配置文件,WAR文件或者子目录(包含新的web应用)放到appBase目录下,或者当XML配置文件放到$CATALINA_HOME/conf/[engine_name]/[host_name]目录)的时候,该web应用被自动发布。auto deployer也负责跟踪web应用的如下变化:

如果更新了WEB-INF/web.xml文件,会触发web应用的重载;
如果WAR文件被更新,并且WAR文件已经展开,首先删除展开的web应用,然后发布更新的WAR文件;
如果XML配置文件被更新,首先删除该应用(但是不删除任何展开以后的目录),然后发布相关的web应用
主机名别名
在许多服务器环境中,多个网络名称可能指向同一个IP地址(比如,www.mycompany.com和company.com都指向192.168.1.1)。正常情况下,每个网络名称应该在conf/server.xml中对应一个Host元素,每个Host元素有自己的一套web应用。

但是,有些情况下,可能希望两个或者更多网络名称解析到同一个虚拟主机上,运行相同的一套web应用。这种情况的典型用途是公司网站。用户可以使用www.mycompany.com和company.com访问同样的内容和应用。

通过在Host元素中嵌套一个或者多个Alias元素,可以完成上述功能。





<Host name="www.mycompany.com" ...>
  ...
  <Alias>mycompany.com</Alias>
  ...
</Host>


为了使这个策略生效,所有的网络名称必须在DNS服务器登记,指向运行Catalina实例的同一台计算机。



生命期Listeners
如果一个Java对象需要知道Context什么时候启动,什么时候停止,可以在这个对象中嵌套一个Listener元素。该Listener元素必须实现了org.apache.catalina.LifecycleListener接口,在发生对应的生命期事件的时候,通知该Listener。可以按照如下的格式配置这样的Listener:



<Host name="localhost" ...>
  ...
  <Listener className="com.mycompany.mypackage.MyListener" ... >
  ...
</Host>


注意,一个listener可以具有任意多的附加属性。属性名与JavaBean的属性名相对应,使用标准的属性命名方法。
请求过滤器
对每个发送到Engine,Host或者Context的请求,可以要求Catalina检查IP地址或主机名称。Catalina使用一系列配置好的“接受”或者“拒绝”过滤器对客户端的地址或者主机名进行检查,过滤器是按照正则表达式语法定义的,由Jakarta Regexp正则表达式库支持。不被接受的请求会返回一个HTTP“Forbidden”错误。下面是过滤器的定义。


<Host name="localhost" ...>
  ...
  <Valve className="org.apache.catalina.valves.RemoteHostValve"
         allow="*.mycompany.com,www.yourcompany.com"/>
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         deny="192.168.1.*"/>
  ...
</Host>




如果想知道过滤器支持的更多选项的信息,参考Remote Address Filter和Remote Host Filter

单次登录(Single Sign On)
在许多环境尤其是门户环境下,对特定虚拟主机上的一套web应用,只希望对用户进行一次认证。这可以在Host元素中嵌套如下的元素完成:



<Host name="localhost" ...>
  ...
  <Valve className="org.apache.catalina.authenticator.SingleSignOn"
         debug="0"/>
  ...
</Host>


单次登录根据如下规则运作:

这个虚拟主机的所有web应用必须共享同一个Realm。在实际情况中,这意味着你可以在这个Host元素中嵌套Realm元素(或者是Engine元素),但不能在web应用对应的Context中嵌套Realm元素
如果用户只访问这个虚拟主机上任意web应用的没有加保护的资源,他们不会被要求认证;
一旦用户访问这个虚拟主机下的任意web应用的保护资源,用户会被要求认证。使用正在访问的web应用的login方法;
一旦认证通过,与这个用户相关联的角色决定了它对所有的web应用的访问控制权限;而不需要对每个应用单独认证;
一旦用户从某个web应用注销(比如,如果使用了基于表单的login,对应的session过期或者无效),用户在所有web应用的session都会失效;任何后续的对保护资源的访问会要求对用户重新认证;
单次登录特征使用HTTP cookies传输令牌,将每个请求和用户身份联系起来,因此客户端必须支持cookies;
用户Web应用
许多web服务器会自动将以"~"和用户名开始的URI映射到用户主目录下的某个目录(通常为public_html)。在Catalina中,通过使用特殊的Listener元素,可以完成上述功能

在利用/etc/password来标识有效用户的Unix系统下使用如下配置:



<Host name="localhost" ...>
  ...
  <Listener className="org.apache.catalina.startup.UserConfig"
            directoryName="public_html"
            userClass="org.apache.catalina.startup.PasswdUserDatabase"/>
  ...
</Host>


在不使用/etc/password的服务器上,可以要求Catalina将指定的基准目录下的所有目录(比如c:\homes)看成是用户主目录:



<Host name="localhost" ...>
  ...
  <Listener className="org.apache.catalina.startup.UserConfig"
            directoryName="public_html"
            homeBase=c:\Homes"
            userClass="org.apache.catalina.startup.HomesUserDatabase"/>
  ...
</Host>


如果某个名为craigmcc的用户的主目录已经设置好,通过使用如下URL,可以浏览它的内容:



http://www.mycompany.com:8080/~craigmcc




使用这个特征需要注意如下几个问题:

每个用户web应用会使用该Host的DefaultContext元素定义的特征发布;
包含多个Listener元素的实例也是有效的。但是,这只在你希望配置多个homeBase目录情况下才有意义;
执行Catalina的用户名对每个用户的web应用目录以及它的所有内容必须有读的权限;

http://www.blogjava.net/xianeizhu/archive/2006/02/16/31084.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-330384-1-1.html 上篇帖子: Tomcat配置一个web项目 下篇帖子: tomcat中添加admin模块
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表