44

Tomcat9.0官方手册中文版(三):应用管理

 5 years ago
source link: http://www.apexyun.com/tomcat9-0guan-fang-shou-ce-zhong-wen-ban-san-ying-yong-guan-li/?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

1、Introduction

在许多生产环境中,具有部署新Web应用程序或取消部署现有Web应用程序的功能非常有用,而且无需关闭并重新启动整个容器。此外,即使您尚未在Tomcat服务器配置文件中声明应用为reloadable,也可以让现有应用程序重新加载。

为了支持这些功能,Tomcat包括一个Web应用程序(默认安装在上下文路径上)/manager)支持以下功能:

  • 通过上传的WAR文件来部署新的Web应用程序。
  • 在指定的上下文路径上部署新的Web应用程序。
  • 列出当前部署的Web应用程序,以及这些Web应用程序当前处于活动状态的会话。
  • 重新加载现有的Web应用程序,以反映/WEB-INF/classes 或 /WEB-INF/lib目录内容的变化.
  • 列出OS和JVM属性值。
  • 列出可用的全局JNDI资源,这些资源可以在<Context>元素节点下的<ResourceLink>节点中使用。
  • 启动已停止的应用程序(从而使其再次可用)。
  • 停止现有应用程序(以使其变得不可用),但不要取消部署它。
  • 取消部署已部署的Web应用程序并删除其文档基目录(除非它是从文件系统部署的)。

默认的Tomcat安装包括Manager。添加Manager Web应用程序的实例Context到新主机安装manager.xml中的上下文配置文件$CATALINA_BASE/conf/[enginename]/[hostname]。这是一个例子:

<Context privileged="true" antiResourceLocking="false"

docBase="${catalina.home}/webapps/manager">

<Valve className="org.apache.catalina.valves.RemoteAddrValve"

allow="127\.0\.0\.1" />

</Context>

如果您将Tomcat配置为支持多个虚拟主机(网站),则需要为每个虚拟主机配置一个Manager。

有三种方法可以使用 Manager应用程序 .

  • 作为具有用户界面的应用程序,您可以在浏览器中使用。这是一个示例:http://localhost:8080/manager/html .你可以把localhost替换成你的网站的URL
  • 仅使用HTTP请求的最小版本,适用于系统管理员设置的脚本。命令作为请求URI的一部分给出,响应采用简单文本的形式,可以很容易地进行解析和处理。
  • 一组方便的任务定义 Ant (1.4或更高版本)构建工具。

2、配置Manager Application Access

下面的描述使用变量名 $ CATALINA_BASE 来引用解析大多数相对路径的基目录。如果尚未通过设置 CATALINA_BASE 目录为多个实例配置 Tomcat ,则 $ CATALINA_BASE 将设置为 $ CATALINA_HOME 的值,即已安装 Tomcat 的目录。

使用默认设置的Tomcat是非常不安全的,这些设置允许Internet上的任何人在您的服务器上执行Manager应用程序。因此,Manager应用程序需要有manager角色的用户使用用户名和密码进行权限验证。此外,默认用户文件中没有用户名($CATALINA_BASE/conf/tomcat-users.xml)分配给这些角色。因此,默认情况下完全禁用对Manager应用程序的访问。

您可以在Manager Web应用程序的web.xml文件中找到角色名称。可用的角色是:

  • manager-gui - 访问HTML界面。
  • manager-status - 仅访问“服务器状态”页面。
  • manager-script - 访问本文档中描述的工具友好的纯文本界面,以及“服务器状态”页面。
  • manager-jmx - 访问JMX代理接口和“服务器状态”页面。

HTML接口受到CSRF(跨站点请求伪造)攻击的保护,但文本和JMX接口无法受到保护。这意味着当使用Web浏览器访问Manager应用程序时,允许访问文本和JMX界面的用户必须小心谨慎。为了保持CSRF保护:

  • 如果使用Web浏览器使用具有 manager-scriptmanager-jmx 角色其中任何一个的用户访问Manager应用程序(例如用于测试纯文本或JMX接口),之后必须关闭浏览器的所有窗口以终止会话。如果您不关闭浏览器并访问其他站点,您可能会成为CSRF攻击的受害者。
  • 建议永远不要授予 manager-scriptmanager-jmx 角色给拥有 manager-gui角色 的用户.

注意,JMX代理接口实际上是Tomcat的低级根类管理接口。如果有人知道JMX的命令,那么他可以做很多事情。启用时应该谨慎配置 manager-jmx 角色.

要启用对Manager Web应用程序的访问,您必须创建新的用户并关联一个 manager-xxx 角色,或添加一个 manager-xxx角色给 某些现有的用户。由于本文档的大部分内容都描述了使用文本界面,因此本示例将使用角色名称 manager-script 。具体如何配置用户取决于哪个你使用哪种( Realm )实现方式:

  • UserDatabaseRealm plus MemoryUserDatabase , or MemoryRealm — 该配置是tomcat的默认配置,在$CATALINA_BASE/conf/server.xml里配置. 该配置默认情况下读取$CATALINA_BASE/conf/tomcat-users.xml,该文件可以使用任何文本编辑器进行编辑。该文件包含XML节点<user>可以看成一个单独的用户,可能看起来像这样: <user username="craigmcc" password="secret" roles="standard,manager-script" />  它定义了此人用于登录的用户名和密码,以及与其关联的角色名称。你可以在roles属性添加 manager-script 角色(以逗号分隔)来为用户添加更多角色。
  • DataSourceRealm or JDBCRealm - 您的用户和角色信息存储在通过JDBC访问的数据库中。添加 manager-script 根据环境的标准过程,为一个或多个现有用户创建角色,和/或创建一个或多个已分配此角色的新用户。
  • JNDIRealm - 您的用户和角色信息存储在通过LDAP访问的目录服务器中。添加 manager-script 根据环境的标准过程,为一个或多个现有用户创建角色,和/或创建一个或多个已分配此角色的新用户。

第一次尝试操作Manager时,您将使用BASIC身份验证登录。您输入的用户名和密码无关紧要,只要该用户有 manager-script这个角色就可以 .

除了密码限制之外,还可以限制对Manager Web应用程序的访问IP地址或者通过添加一个主机RemoteAddrValve 或者 RemoteHostValve。以下是通过IP地址限制对localhost的访问的示例:

<Context privileged="true">

<Valve className="org.apache.catalina.valves.RemoteAddrValve"

allow="127\.0\.0\.1"/>

</Context>

3、HTML用户友好界面

Manager Web应用程序的用户友好HTML界面位于

http://{host}:{port}/manager/html

正如上面已经提到的,你需要拥有 manager-gui角色 。有一个单独的文档,提供有关此接口的帮助。看到:

HTML接口受到CSRF(跨站点请求伪造)攻击的保护。每次访问HTML页面都会生成一个随机令牌,该令牌存储在您的会话中,并包含在页面上的所有链接中。如果您的下一个操作没有正确的令牌值,则该操作将被拒绝。如果令牌已过期,您可以从主页面重新开始。

4、支持的Manager命令

Manager应用程序可以使用的所有命令都在单个请求URI中指定,如下所示:

http://{host}:{port}/manager/text/{command}?{parameters}

{host} 和 {port}表示运行Tomcat的主机名和端口号,{command}表示您要执行的Manager命令,以及{parameters}表示特定于该命令的查询参数。在下面的插图中,根据您的安装自定义主机和端口。

这些命令通常由HTTP GET请求执行。/deploy命令可以使用HTTP PUT执行。

4.1、Common Parameters

大多数命令接受以下一个或多个查询参数:

  • path - 您正在处理的Web应用程序的上下文路径(包括前导斜杠)。要选择ROOT Web应用程序,请指定“/”。 NOTE :无法在Manager应用程序本身上执行管理命令。 NOTE :如果未明确指定path参数,则将使用 Context naming 的config参数的规则,或者,如果config参数不存在,则为war的参数。
  • version - 此Web应用程序的版本。如果在需要路径的任何地方使用并行部署,则必须指定除路径之外的版本,并且路径和版本的组合必须是唯一的,而不仅仅是路径。 NOTE :如果未明确指定路径,则忽略version参数。
  • war - Web应用程序归档(WAR)文件的URL,或包含Web应用程序的目录的路径名,或上下文配置“.xml”文件。您可以使用以下任何格式的网址:
  • file:/absolute/path/to/a/directory .
  • file:/absolute/path/to/a/webapp.war
  • file:/absolute/path/to/a/context.xml
  • directory
  • webapp.war

每个命令都会返回一个响应text/plain格式(即没有HTML标记的纯ASCII),使人和程序都能轻松阅读。响应的第一行将从OK / FAIL开始,指示请求的命令是否成功。如果失败,第一行的其余部分将包含遇到的问题的描述。一些命令包括如下所述的附加信息行。

国际化说明- Manager应用程序在资源包中查找其消息字符串,因此可能已为您的平台翻译了字符串。以下示例显示了消息的英文版本。

4.2、远程部署新的应用程序存档(WAR)

http://localhost:8080/manager/text/deploy?path=/foo

使用HTTP PUT请求通过上面的URL进行部署war文件,这个请求会将war包安装到appBase对应的虚拟主机的目录,并启动。稍后可以通过/undeploy命令使该应用程序取消部署(并删除相应的WAR文件)。

该命令由HTTP PUT请求执行。

.WAR文件可以包括Tomcat特定的部署配置,方法是在/META-INF/context.xml文件中配置Context节点.

URL参数包括:

  • update:设置为true时,将首先取消部署任何现有更新。默认值设置为false。
  • tag:指定标记名称,这允许将部署的webapp与标记或标签相关联。如果取消部署Web应用程序,则可以在需要时仅使用标记重新部署它。
  • config :格式的上下文配置“.xml”文件的URL file:/absolute/path/to/a/context.xml 。这必须是Web应用程序上下文配置“.xml”文件的绝对路径,该文件包含Context配置元素。

NOTE- 这个命令与/undeploy命令逻辑相反 .

如果安装和启动成功,您将收到如下响应:

OK - Deployed application at context path /foo

否则,响应将以FAIL开始并包含一条错误消息。可能的问题原因包括:

  • 应用程序已经存在于 path / foo 中 所有当前运行的Web应用程序的上下文路径必须是唯一的。因此,您必须使用此上下文路径取消部署现有Web应用程序,或为新应用程序选择其他上下文路径。将update参数设置值为true可以避免这个错误。在这种情况下,将在执行部署之前对现有应用程序执行取消部署。
  • 遇到异常 尝试启动新的Web应用程序时遇到异常。检查Tomcat日志以获取详细信息。

5、从本地路径部署新应用程序

部署并启动新Web应用程序到指定path(任何其他Web应用程序不得使用它)。这个命令与/undeploy命令逻辑相反.

此命令由HTTP GET请求执行。可以使用许多不同的方法来使用deploy命令。

5.1、部署以前部署的Web应用程序

http://localhost:8080/manager/text/deploy?path=/footoo&tag=footag

这可以用于部署先前部署的Web应用程序,该应用程序已使用tag属性。请注意,Manager webapp的工作目录将包含以前部署的WAR;删除它会使部署失败。

5.2、按URL部署目录或WAR

部署位于Tomcat服务器上的Web应用程序目录或“.war”文件。如果不指定path,则路径和版本派生自目录名称或war文件名。该war参数指定一个URL(包括file:scheme)用于目录或Web应用程序归档(WAR)文件。

在此示例中,Web应用程序位于/path/to/foo目录中,在Tomcat服务器上部署为名为/footoo的Web应用程序.

http://localhost:8080/manager/text/deploy?path=/footoo&war=file:/path/to/foo

在此示例中/path/to/bar.war文件在Tomcat服务器上部署为名为/bar的Web应用程序。请注意,没有path参数,因此上下文路径默认用bar.war解压后的名称。

http://localhost:8080/manager/text/deploy?war=file:/path/to/bar.war

5.3、从主机appBase部署目录或war

部署位于Host appBase目录中的Web应用程序目录或“.war”文件。路径和可选版本派生自目录或war文件名。

在此示例中,Web应用程序位于名为foo的子目录中,在Tomcat服务器的Host appBase目录中部署为名为foo的Web应用程序。请注意,使用的上下文路径是Web应用程序目录的名称。

http://localhost:8080/manager/text/deploy?war=foo

在此示例中bar.war位于Tomcat服务器上的Host appBase目录中,将其部署为名为/bar的Web应用程序上下文.

http://localhost:8080/manager/text/deploy?war=bar.war

5.4、使用Context配置“.xml”文件进行部署

如果Host的 deploy标志设置为true,则可以使用Context配置“.xml”文件和可选的“.war”文件或Web应用程序目录来部署Web应用程序。上下文path使用上下文“.xml”配置文件部署Web应用程序时不使用。

Context配置“.xml”文件可以包含Web应用程序的有效XML,就像它在Tomcat中配置一样server.xml配置文件。这是一个例子:

<Context path="/foobar" docBase="/path/to/application/foobar">

</Context>

When the optional war参数设置为Web应用程序“.war”文件或目录的URL,它将覆盖在上下文配置“.xml”文件中配置的任何docBase。

以下是使用Context配置“.xml”文件部署应用程序的示例。

http://localhost:8080/manager/text/deploy?config=file:/path/context.xml

以下是使用Context配置“.xml”文件和位于服务器上的Web应用程序“.war”文件部署应用程序的示例。

http://localhost:8080/manager/text/deploy

?config=file:/path/context.xml&war=file:/path/bar.war

5.5、Deployment Notes

如果主机配置了unpackWARs = true并且您部署了war文件,则war将被解压缩到Host appBase目录中的目录中。

如果应用程序war或目录安装在Host appBase目录中,并且Host配置了autoDeploy = true,或者Context路径必须与没有“.war”扩展名的目录名或war文件名匹配。

为了在不受信任的用户可以管理Web应用程序时的安全性,可以将Host deployXML标志设置为false。这可以防止不受信任的用户使用配置XML文件部署Web应用程序,还可以防止他们部署位于其主机appBase之外的应用程序目录或“.war”文件。

5.6、Deploy Response

如果安装和启动成功,您将收到如下响应:

OK - Deployed application at context path /foo

否则,响应将从FAIL开始并包含一条错误消息。可能的问题原因包括:

  • 应用程序已经存在于 path / foo 中 所有当前运行的Web应用程序的上下文路径必须是唯一的。因此,您必须使用此上下文路径取消部署现有Web应用程序,或为新应用程序选择其他上下文路径。设置update值为true避免这个错误。在这种情况下,将在执行部署之前对现有应用程序执行取消部署。
  • 文档库不存在或不是可读目录。
  • 遇到异常 尝试启动新的Web应用程序时遇到异常。检查Tomcat日志以获取详细信息。
  • 指定了无效的应用程序 URL。 您指定的目录或Web应用程序的URL无效。此类网址必须以file:,WAR文件的URL必须以“.war”结尾。
  • 指定了无效的上下文路径 上下文路径必须以斜杠字符开头。要引用ROOT Web应用程序,请使用“/”。
  • 上下文路径必须与目录或 WAR 文件名匹配: 如果应用程序war或目录安装在Host appBase目录中,并且Host配置了autoDeploy = true,则Context路径必须与没有“.war”扩展名的目录名或war文件名匹配。
  • 只能安装 Host Web 应用程序目录中的 Web 应用程序 如果Host deployXML标志设置为false,则尝试在Host appBase目录之外部署Web应用程序目录或“.war”文件时,将发生此错误。

5.7、列出当前部署的应用程序

http://localhost:8080/manager/text/list

列出上下文路径,当前状态(running or stopped),以及所有当前部署的Web应用程序的活动会话数。启动Tomcat后立即执行的典型响应可能如下所示:

OK - Listed applications for virtual host localhost

/webdav:running:0:webdav

/examples:running:0:examples

/manager:running:0:manager

/:running:0:ROOT

/test:running:0:test##2

/test:running:0:test##1

5.8、重新加载现有应用程序

http://localhost:8080/manager/text/reload?path=/examples

发信号通知现有应用程序关闭并重新加载。当Web应用程序上下文不可重新加载并且您已更新了/WEB-INF/classes目录中的类或属性文件时,或在/WEB-INF/lib文件夹添加或更新jar文件时 ,这个功能很有用.

如果此命令成功,您将看到如下响应:

OK - Reloaded application at context path /examples

否则,响应将从FAIL并包含一条错误消息。可能的问题原因包括:

  • 遇到异常 尝试重新启动Web应用程序时遇到异常。检查Tomcat日志以获取详细信息。
  • 指定了无效的上下文路径 上下文路径必须以斜杠字符开头。要引用ROOT Web应用程序,请使用“/”。
  • path / foo 没有上下文 您指定的上下文路径上没有已部署的应用程序。
  • 未指定上下文路径 The path参数是必需的。
  • 在路径 / foo 上部署的 WAR 不支持重新加载 目前,应用程序重新加载(以获取类或更改web.xml直接从WAR文件部署Web应用程序时,不支持file)。它仅在从解压缩目录部署Web应用程序时才有效。如果您使用的是WAR文件,则应该undeploy and then deploy or deploy with the update再次参数应用程序来获取您的更改。

列出OS和JVM属性

http://localhost:8080/manager/text/serverinfo

列出有关Tomcat版本,操作系统和JVM属性的信息。

如果发生错误,响应将以响应开始FAIL并包含一条错误消息。可能的问题原因包括:

  • 遇到异常 尝试枚举系统属性时遇到异常。检查Tomcat日志以获取详细信息。

列出可用的全局JNDI资源

http://localhost:8080/manager/text/resources[?type=xxxxx]

列出可在上下文配置文件的资源链接中使用的全局JNDI资源。如果你指定type请求参数,该值必须是您感兴趣的资源类型的完全限定Java类名称(例如,您将指定javax.sql.DataSource获取所有可用JDBC数据源的名称)。如果你没有指定type请求参数,将返回所有类型的资源。

取决于是否type请求参数是否指定,正常响应的第一行将是:

OK - Listed global resources of all types

or

OK - Listed global resources of type xxxxx

每个资源后跟一行。每行由冒号字符(“:”)分隔的字段组成,如下所示:

  • 全球资源名称- 此全局JNDI资源的名称,将在其中使用global attribute of a <ResourceLink> element.
  • 全球资源类型- 此全局JNDI资源的完全限定Java类名。

如果发生错误,响应将以响应开始FAIL并包含一条错误消息。可能的问题原因包括:

  • 遇到异常 尝试枚举全局JNDI资源时遇到异常。检查Tomcat日志以获取详细信息。
  • 没有可用的全局 JNDI 资源 您运行的Tomcat服务器已配置为没有全局JNDI资源。

Session Statistics

http://localhost:8080/manager/text/sessions?path=/examples

显示Web应用程序的默认会话超时,以及在实际超时时间的一分钟范围内的当前活动会话数。例如,重新启动Tomcat然后执行其中一个JSP示例/examples网络应用程序,你可能得到这样的东西:

OK - Session information for application at context path /examples

Default maximum session inactive interval 30 minutes

<1 minutes: 1 sessions

1 - <2 minutes: 1 sessions

Expire Sessions

http://localhost:8080/manager/text/expire?path=/examples&idle=num

显示会话统计信息(如上所示)/sessions命令)并使空闲时间超过的会话到期num分钟。要使所有会话到期,请使用&idle=0 .

OK - Session information for application at context path /examples

Default maximum session inactive interval 30 minutes

1 - <2 minutes: 1 sessions

3 - <4 minutes: 1 sessions

>0 minutes: 2 sessions were expired

Actually /sessions and /expire是同一命令的同义词。区别在于存在idle parameter.

启动现有应用程序

http://localhost:8080/manager/text/start?path=/examples

发出停止的应用程序信号以重新启动,并使其自身再次可用例如,如果应用程序所需的数据库暂时不可用,则停止和启动很有用。通常最好停止依赖此数据库的Web应用程序,而不是让用户不断遇到数据库异常。

如果此命令成功,您将看到如下响应:

OK - Started application at context path /examples

否则,响应将从FAIL并包含一条错误消息。可能的问题原因包括:

  • 遇到异常 尝试启动Web应用程序时遇到异常。检查Tomcat日志以获取详细信息。
  • 指定了无效的上下文路径 上下文路径必须以斜杠字符开头。要引用ROOT Web应用程序,请使用“/”。
  • path / foo 没有上下文 您指定的上下文路径上没有已部署的应用程序。
  • 未指定上下文路径 The path参数是必需的。

停止现有的应用程序

http://localhost:8080/manager/text/stop?path=/examples

发信号通知现有应用程序使其自身不可用,但将其部署。应用程序停止时进入的任何请求都将看到HTTP错误404,此应用程序将在列表应用程序命令中显示为“已停止”。

如果此命令成功,您将看到如下响应:

OK - Stopped application at context path /examples

否则,响应将从FAIL并包含一条错误消息。可能的问题原因包括:

  • 遇到异常 尝试停止Web应用程序时遇到异常。检查Tomcat日志以获取详细信息。
  • 指定了无效的上下文路径 上下文路径必须以斜杠字符开头。要引用ROOT Web应用程序,请使用“/”。
  • path / foo 没有上下文 您指定的上下文路径上没有已部署的应用程序。
  • 未指定上下文路径 The path参数是必需的。

取消部署现有应用程序

http://localhost:8080/manager/text/undeploy?path=/examples

WARNING- 此命令将删除其中存在的任何Web应用程序工件appBase此虚拟主机的目录(通常为“webapps”)。这将删除应用程序.WAR(如果存在),应用程序目录来自解压缩形式的部署或.WAR扩展以及来自的XML上下文定义$CATALINA_BASE/conf/[enginename]/[hostname]/目录。如果您只想让应用程序停止服务,您应该使用/stop command instead.

发信号通知现有应用程序正常关闭自身,并将其从Tomcat中删除(这也使得此上下文路径可供以后重用)。此外,如果文档根目录中存在,则将其删除appBase此虚拟主机的目录(通常为“webapps”)。这个命令与逻辑相反/deploy command.

如果此命令成功,您将看到如下响应:

OK - Undeployed application at context path /examples

否则,响应将从FAIL并包含一条错误消息。可能的问题原因包括:

  • 遇到异常 尝试取消部署Web应用程序时遇到异常。检查Tomcat日志以获取详细信息。
  • 指定了无效的上下文路径 上下文路径必须以斜杠字符开头。要引用ROOT Web应用程序,请使用“/”。
  • 没有名为 / foo 的上下文 没有已指定名称的已部署应用程序。
  • 未指定上下文路径 The path参数是必需的。

发现内存泄漏

http://localhost:8080/manager/text/findleaks[?statusLine=[true|false]]

查找泄漏诊断会触发完整的垃圾回收。它应该在生产系统中极其谨慎地使用。

查找泄漏诊断尝试识别在停止,重新加载或取消部署时导致内存泄漏的Web应用程序。应始终使用分析器确认结果。诊断使用StandardHost实现提供的其他功能。如果使用不扩展StandardHost的自定义主机,它将无法工作。

从Java代码中明确触发完整的垃圾收集被记录为不可靠。此外,根据所使用的JVM,还有禁用显式GC触发的选项,例如-XX:+DisableExplicitGC。如果要确保诊断程序成功运行完整的GC,则需要使用GC日志记录,JConsole或类似工具进行检查。

如果此命令成功,您将看到如下响应:

/leaking-webapp

如果您希望在响应中看到状态行,请包括statusLine请求中的查询参数,值为true.

已停止,重新加载或取消部署的Web应用程序的每个上下文路径,但先前运行的哪些类仍然加载到内存中,从而导致内存泄漏,将在新行上列出。如果应用程序已多次重新加载,则可能会多次列出。

如果命令不成功,响应将以响应开始FAIL并包含一条错误消息。

连接器SSL / TLS密码信息

http://localhost:8080/manager/text/sslConnectorCiphers

SSL Connector / Ciphers诊断列出了当前为每个连接器配置的SSL / TLS密码。对于NIO和NIO2,列出了各个密码套件的名称。对于APR,返回SSLCipherSuite的值。

响应将如下所示:

OK - Connector / SSL Cipher information

Connector[HTTP/1.1-8080]

SSL is not enabled for this connector

Connector[HTTP/1.1-8443]

TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA

TLS_DHE_RSA_WITH_AES_128_CBC_SHA

TLS_ECDH_RSA_WITH_AES_128_CBC_SHA

TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA

...

连接器SSL / TLS证书链信息

http://localhost:8080/manager/text/sslConnectorCerts

SSL Connector / Certs诊断列出了当前为每个虚拟主机配置的证书链。

响应将如下所示:

OK - Connector / Certificate Chain information

Connector[HTTP/1.1-8080]

SSL is not enabled for this connector

Connector[HTTP/1.1-8443]-_default_-RSA

[

[

Version: V3

Subject: CN=localhost, OU=Apache Tomcat PMC, O=The Apache Software Foundation, L=Wakefield, ST=MA, C=US

Signature Algorithm: SHA256withRSA, OID = 1.2.840.113549.1.1.11

...

连接器SSL / TLS可信证书信息

http://localhost:8080/manager/text/sslConnectorTrustedCerts

SSL Connector / Certs诊断列出了当前为每个虚拟主机配置的可信证书。

响应将如下所示:

OK - Connector / Trusted Certificate information

Connector[HTTP/1.1-8080]

SSL is not enabled for this connector

Connector[AJP/1.3-8009]

SSL is not enabled for this connector

Connector[HTTP/1.1-8443]-_default_

[

[

Version: V3

Subject: CN=Apache Tomcat Test CA, OU=Apache Tomcat PMC, O=The Apache Software Foundation, L=Wakefield, ST=MA, C=US

...

重新加载TLS配置

http://localhost:8080/manager/text/sslReload?tlsHostName=name

重新加载TLS配置文件(证书和密钥文件,这不会触发重新解析server.xml)。要为所有主机重新加载文件,请不要指定tlsHostName parameter.

OK - Reloaded TLS configuration for [_default_]

Thread Dump

http://localhost:8080/manager/text/threaddump

编写JVM线程转储。

响应将如下所示:

OK - JVM thread dump

2014-12-08 07:24:40.080

Full thread dump Java HotSpot(TM) Client VM (25.25-b02 mixed mode):

"http-nio-8080-exec-2" Id=26 cpu=46800300 ns usr=46800300 ns blocked 0 for -1 ms waited 0 for -1 ms

java.lang.Thread.State: RUNNABLE

locks java.util.concurrent.ThreadPoolExecutor$Worker@1738ad4

at sun.management.ThreadImpl.dumpThreads0(Native Method)

at sun.management.ThreadImpl.dumpAllThreads(ThreadImpl.java:446)

at org.apache.tomcat.util.Diagnostics.getThreadDump(Diagnostics.java:440)

at org.apache.tomcat.util.Diagnostics.getThreadDump(Diagnostics.java:409)

at org.apache.catalina.manager.ManagerServlet.threadDump(ManagerServlet.java:557)

at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:371)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:618)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)

...

VM Info

http://localhost:8080/manager/text/vminfo

编写有关Java虚拟机的一些诊断信息。

响应将如下所示:

OK - VM info

2014-12-08 07:27:32.578

Runtime information:

vmName: Java HotSpot(TM) Client VM

vmVersion: 25.25-b02

vmVendor: Oracle Corporation

specName: Java Virtual Machine Specification

specVersion: 1.8

specVendor: Oracle Corporation

managementSpecVersion: 1.2

name: ...

startTime: 1418012458849

uptime: 393855

isBootClassPathSupported: true

OS information:

...

Save Configuration

http://localhost:8080/manager/text/save

如果指定不带任何参数,则此命令将服务器的当前配置保存到server.xml。如果需要,现有文件将重命名为备份。

如果指定了path与已部署的Web应用程序的路径匹配的参数,然后该Web应用程序的配置将保存到中的适当命名的context.xml文件中xmlBase对于当前的主持人。

要使用该命令,必须存在StoreConfig MBean。通常使用。配置 StoreConfigLifecycleListener .

如果命令不成功,响应将以响应开始FAIL并包含一条错误消息。

Server Status

从以下链接中,您可以查看有关服务器的状态信息。任何一个 manager-xxx 角色允许访问此页面。

http://localhost:8080/manager/status

http://localhost:8080/manager/status/all

以HTML格式显示服务器状态信息。

http://localhost:8080/manager/status?XML=true

http://localhost:8080/manager/status/all?XML=true

以XML格式显示服务器状态信息。

首先,您拥有服务器和JVM版本号,JVM提供程序,操作系统名称和编号,后跟体系结构类型。

其次,有关于JVM的内存使用情况的信息。

然后,有关于Tomcat AJP和HTTP连接器的信息。两者都有相同的信息:

  • 线程信息:最大线程数,最小和最大备用线程数,当前线程数和当前线程忙数。
  • 请求信息:最大处理时间和处理时间,请求和错误计数,接收和发送的字节数。
  • 显示阶段,时间,发送字节,字节接收,客户端,VHost和请求的表。表中列出了所有现有线程。以下是可能的线程阶段列表:

If you are using /status/all命令,将提供有关每个已部署的Web应用程序的其他信息。

使用JMX代理Servlet

什么是JMX代理Servlet

JMX代理Servlet是一个轻量级代理,用于获取和设置tomcat内部。 (或者通过MBean公开的任何类)它的用法不是非常用户友好,但UI对于集成命令行脚本以监视和更改tomcat的内部非常有用。您可以使用代理执行两项操作:获取信息和设置信息。为了让您真正了解JMX代理Servlet,您应该对JMX有一个大致的了解。如果您不知道JMX是什么,那么请准备好混淆。

JMX Query command

采取以下形式:

http://webserver/manager/jmxproxy/?qry=STUFF

Where STUFF是您希望执行的JMX查询。例如,以下是您可能希望运行的一些查询:

  • qry=*%3Atype%3DRequestProcessor%2C* --> type=RequestProcessor它将找到可以处理请求并报告其状态的所有工作人员。
  • qry=*%3Aj2eeType=Servlet%2c* --> j2eeType=Servlet返回所有加载的servlet。
  • qry=Catalina%3Atype%3DEnvironment%2Cresourcetype%3DGlobal%2Cname%3DsimpleValue --> Catalina:type=Environment,resourcetype=Global,name=simpleValue它按给定名称查找特定MBean。

您需要对此进行试验以真正了解其功能。如果您提供否qry参数,然后将显示所有MBean。我们真的建议查看tomcat源代码并理解JMX规范,以便更好地理解您可能运行的所有查询。

JMX Get command

JXMProxyServlet还支持“get”命令,您可以使用该命令获取特定MBean属性的值。一般形式的get command is:

http://webserver/manager/jmxproxy/?get=BEANNAME&att=MYATTRIBUTE&key=MYKEY

您必须提供以下参数:

  1. get:完整的bean名称
  2. att:您要获取的属性
  3. key:(可选)CompositeData MBean属性的键

如果一切顺利,那么它会说OK,否则将显示错误消息。例如,假设我们希望获取当前堆内存数据:

http://webserver/manager/jmxproxy/?get=java.lang:type=Memory&att=HeapMemoryUsage

或者,如果您只想要“使用”密钥:

http://webserver/manager/jmxproxy/

?get=java.lang:type=Memory&att=HeapMemoryUsage&key=used

JMX Set command

现在你可以查询一个MBean,它是时候去挖掘Tomcat的内部了! set命令的一般形式是:

http://webserver/manager/jmxproxy/?set=BEANNAME&att=MYATTRIBUTE&val=NEWVALUE

所以你需要提供3个请求参数:

  1. set:完整的bean名称
  2. att:您要更改的属性
  3. val: The new value

如果一切正常,那么它会说OK,否则将显示错误消息。例如,假设我们希望立即启动调试ErrorReportValve。以下将调试设置为10。

http://localhost:8080/manager/jmxproxy/

?set=Catalina%3Atype%3DValve%2Cname%3DErrorReportValve%2Chost%3Dlocalhost

&att=debug&val=10

我的结果是(YMMV):

Result: ok

如果我传入一个错误的值,这就是我所看到的。这是我使用的URL,我尝试设置调试等于&#39;cow&#39;:

http://localhost:8080/manager/jmxproxy/

?set=Catalina%3Atype%3DValve%2Cname%3DErrorReportValve%2Chost%3Dlocalhost

&att=debug&val=cow

当我尝试时,我的结果是

Error: java.lang.NumberFormatException: For input string: "cow"

JMX Invoke command

The invokecommand允许在MBean上调用方法。该命令的一般形式是:

http://webserver/manager/jmxproxy/

?invoke=BEANNAME&op=METHODNAME&ps=COMMASEPARATEDPARAMETERS

例如,要打电话给findConnectors() method of the Service use:

http://localhost:8080/manager/jmxproxy/

?invoke=Catalina%3Atype%3DService&op=findConnectors&ps=

使用Ant执行Manager命令

除了通过HTTP请求执行Manager命令的能力之外,如上所述,Tomcat包含一组方便的任务定义 Ant (1.4或更高版本)构建工具。要使用这些命令,必须执行以下设置操作:

  • 从中下载Ant的二进制分发版 https://ant.apache.org 。你必须使用版本 1.4 or later.
  • 将Ant分发安装在方便的目录中(在这些说明的其余部分中称为ANT_HOME)。
  • Add the $ANT_HOME/bin directory to your PATH环境变量。
  • 在Tomcat用户数据库中至少配置一个用户名/密码组合,其中包含manager-script role.

要在Ant中使用自定义任务,必须首先使用<import>元件。所以,你的build.xml文件可能看起来像这样:

<project name="My Application" default="compile" basedir=".">

<!-- Configure the directory into which the web application is built -->

<property name="build"    value="${basedir}/build"/>

<!-- Configure the context path for this application -->

<property name="path"     value="/myapp"/>

<!-- Configure properties to access the Manager application -->

<property name="url"      value="http://localhost:8080/manager/text"/>

<property name="username" value="myusername"/>

<property name="password" value="mypassword"/>

<!-- Configure the path to the Tomcat installation -->

<property name="catalina.home" value="/usr/local/apache-tomcat"/>

<!-- Configure the custom Ant tasks for the Manager application -->

<import file="${catalina.home}/bin/catalina-tasks.xml"/>

<!-- Executable Targets -->

<target name="compile" description="Compile web application">

<!-- ... construct web application in ${build} subdirectory, and

generated a ${path}.war ... -->

</target>

<target name="deploy" description="Install web application"

depends="compile">

<deploy url="${url}" username="${username}" password="${password}"

path="${path}" war="file:${build}${path}.war"/>

</target>

<target name="reload" description="Reload web application"

depends="compile">

<reload  url="${url}" username="${username}" password="${password}"

path="${path}"/>

</target>

<target name="undeploy" description="Remove web application">

<undeploy url="${url}" username="${username}" password="${password}"

path="${path}"/>

</target>

</project>

注意:通过上面的导入定义资源任务将覆盖Ant 1.7中添加的资源数据类型。如果您希望使用资源数据类型,则需要使用Ant的命名空间支持进行修改catalina-tasks.xml将Tomcat任务分配给自己的命名空间。

现在,您可以执行类似命令ant deploy将应用程序部署到正在运行的Tomcat实例,或ant reload告诉Tomcat重新加载它。还要注意大多数有趣的值build.xmlfile被定义为可替换属性,因此您可以从命令行覆盖它们的值。例如,您可能会认为将真实管理员密码包含在您的帐户中会带来安全风险build.xml文件的源代码。要避免这种情况,请省略password属性,并从命令行指定它:

ant -Dpassword=secret deploy

任务输出捕获

Using Ant version 1.6.2 或者以后,Catalina任务提供了在属性或外部文件中捕获其输出的选项。它们直接支持以下子集<redirector> type attributes:

AttributeDescriptionRequiredoutput要写入输出的文件的名称。如果错误流也未重定向到文件或属性,则它将显示在此输出中。Noerror应重定向命令标准错误的文件。NologError当您希望在Ant的日志中看到错误输出并且您将输出重定向到文件/属性时,将使用此属性。错误输出将不包含在输出文件/属性中。如果你重定向错误 error or errorProperty 属性,这将没有任何效果。Noappend是否应附加或覆盖输出和错误文件。默认为false.Nocreateemptyfiles是否应该创建输出和错误文件,即使是空的。默认为true.Nooutputproperty应存储命令输出的属性的名称。除非将错误流重定向到单独的文件或流,否则此属性将包含错误输出。Noerrorproperty应存储命令标准错误的属性的名称。No

还可以指定一些其他属性:

AttributeDescriptionRequiredalwaysLog当您希望查看正在捕获的输出时,将使用此属性,该属性也显示在Ant的日志中。除非您正在捕获任务输出,否则不得使用它。默认为false. 此属性将直接受支持 <redirector> in Ant 1.6.3 Nofailonerror当您希望避免任何管理器命令处理错误终止ant执行时,将使用此属性。默认为true。它必须设置为false,如果要捕获错误输出,否则执行将在捕获任何内容之前终止。此属性仅作用于管理器命令执行,任何错误或缺少的命令属性仍将导致Ant执行终止。No

他们也支持嵌入式<redirector>您可以在其中指定其完整属性集的元素,但是input, inputstring and inputencoding即使被接受,也不会被使用,因为它们在这种情况下没有任何意义。参考 ant manual for details on <redirector>元素属性。

下面是一个示例构建文件摘录,显示了如何使用此输出重定向支持:

<target name="manager.deploy"

depends="context.status"

if="context.notInstalled">

<deploy url="${mgr.url}"

username="${mgr.username}"

password="${mgr.password}"

path="${mgr.context.path}"

config="${mgr.context.descriptor}"/>

</target>

<target name="manager.deploy.war"

depends="context.status"

if="context.deployable">

<deploy url="${mgr.url}"

username="${mgr.username}"

password="${mgr.password}"

update="${mgr.update}"

path="${mgr.context.path}"

war="${mgr.war.file}"/>

</target>

<target name="context.status">

<property name="running" value="${mgr.context.path}:running"/>

<property name="stopped" value="${mgr.context.path}:stopped"/>

<list url="${mgr.url}"

outputproperty="ctx.status"

username="${mgr.username}"

password="${mgr.password}">

</list>

<condition property="context.running">

<contains string="${ctx.status}" substring="${running}"/>

</condition>

<condition property="context.stopped">

<contains string="${ctx.status}" substring="${stopped}"/>

</condition>

<condition property="context.notInstalled">

<and>

<isfalse value="${context.running}"/>

<isfalse value="${context.stopped}"/>

</and>

</condition>

<condition property="context.deployable">

<or>

<istrue value="${context.notInstalled}"/>

<and>

<istrue value="${context.running}"/>

<istrue value="${mgr.update}"/>

</and>

<and>

<istrue value="${context.stopped}"/>

<istrue value="${mgr.update}"/>

</and>

</or>

</condition>

<condition property="context.undeployable">

<or>

<istrue value="${context.running}"/>

<istrue value="${context.stopped}"/>

</or>

</condition>

</target>

WARNING:即使它没有多大意义,并且总是一个坏主意,不止一次调用Catalina任务,严重设置Ant任务取决于链可能导致在同一个Ant运行中多次调用任务,即使不是打算。当您从该任务捕获输出时,应该谨慎行事,因为这可能会导致意外情况:

  • 当在一个属性中捕获时,你会在其中找到来自的输出 first 调用,因为Ant属性是不可变的,一旦设置它们就无法更改,
  • 在文件中捕获时,每次运行都会覆盖它,你只会在其中找到 last 呼叫输出,除非你使用append="true"属性,在这种情况下,您将看到附加到文件的每个任务调用的输出。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK