从不同的主机访问 Tomcat Manager App
Posted
技术标签:
【中文标题】从不同的主机访问 Tomcat Manager App【英文标题】:Access Tomcat Manager App from different host 【发布时间】:2016-08-10 18:34:33 【问题描述】:我在远程服务器上安装了tomcat 9,启动后,它运行良好,我可以访问http://host_name:port_num并查看tomcat hello页面。但是当我尝试打开管理器应用程序来查看我部署的应用程序时,我得到 403 访问被拒绝,我已经在 tomcat 用户 xml 中添加了角色,如下所示:
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<user username="user" password="password" roles="admin,manager,manager-gui"/>
我看到的错误信息是:
默认情况下,主机管理器只能从与 Tomcat 运行在同一台机器上的浏览器访问。如果您希望修改此限制,则需要编辑主机管理器的 context.xml 文件。
我应该如何更改 context.xml 文件并访问管理器应用程序?
【问题讨论】:
【参考方案1】:要从不同的机器访问 tomcat 管理器,您必须按照以下步骤操作:
1.用用户和一些角色更新 conf/tomcat-users.xml 文件:
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
这里管理员用户正在分配 roles="manager-gui,manager-script,manager-jmx,manager-status"。
这里的tomcat用户和密码是:admin
2。更新 webapps/manager/META-INF/context.xml 文件(允许 IP 地址):
默认配置:
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
在 Valve 中,它只允许本地机器 IP 以 127.\d+.\d+.\d+ 开头。
2.a : 允许特定 IP:
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|YOUR.IP.ADDRESS.HERE" />
在这里,您只需将 |YOUR.IP.ADDRESS.HERE 替换为您的 IP 地址
2.b:允许所有IP:
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow=".*" />
这里使用 allow=".*" 您允许所有 IP。
谢谢:)
【讨论】:
请添加拒绝投票的具体原因。如果这个答案似乎错误,请解释。在你的解释之后,我可以提高我的知识。谢谢 您可以添加对来自网络的所有 ip 的访问,而不是允许访问单个 ip,使用与默认文件相同的语法:YOUR.IP.ADDRESS.HERE
的答案 - 因此真正回答了从不同主机访问管理器应用程序的问题,而不仅仅是从互联网上的任何地方。恕我直言,这应该是公认的答案。改进建议:将 2.a 移至顶部,可选添加@ThomasLIMIN 的建议。
我显然不希望我的主机被世界上任何地方访问,只有我的电脑,所以,我会赞成这个答案。【参考方案2】:
因为我必须努力学习,默认的 \etc\tomcat\server.xml
文件(至少适用于 OpenSUSE v15.2 上的 v9.0.36)已经包含了管理器和主机管理器应用程序的 <Context ...>
和 <Valve ...>
定义!这些显然推翻了您可能在其他地方定义的任何context.xml
或manager.xml
文件。默认情况下,他们限制对 localhost 的访问,这正是我所看到的。 ||-( 因此,需要调整server.xml
中的设置,或者在那里删除/评论它们,然后可以像以前一样添加其他响应中提到的文件。
【讨论】:
您可能想提及您使用的是哪个 Linux 发行版:Debian 的软件包,例如没有没有在/etc/tomcat/server.xml
中定义Tomcat Manager,而是在/etc/tomcat/Catalina/localhost/manager.xml
中定义,就像在其他答案中一样。
我将其添加到我的回复中。感谢您指出这一点!【参考方案3】:
以下两种配置对我有用。
tomcat-users.xml 详细信息
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="tomcat"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="admin" password="admin" roles="admin-gui"/>
<user username="adminscript" password="adminscrip" roles="admin-script"/>
<user username="tomcat" password="s3cret" roles="manager-gui"/>
<user username="status" password="status" roles="manager-status"/>
<user username="both" password="both" roles="manager-gui,manager-status"/>
<user username="script" password="script" roles="manager-script"/>
<user username="jmx" password="jmx" roles="manager-jmx"/>
-
/webapps/manager/META-INF/context.xml 的
context.xml 和 /webapps/host-manager/META-INF/context.xml
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow=".*" />
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
【讨论】:
这个答案与这个问题不匹配【参考方案4】:每个部署的 webapp 都有一个 context.xml
文件
$CATALINA_BASE/conf/[enginename]/[hostname]
(conf/Catalina/localhost by default)
并且与 webapp 具有相同的名称(在这种情况下为manager.xml
)。如果没有文件,则使用默认值。
因此,您需要创建一个文件conf/Catalina/localhost/manager.xml
并指定要允许远程访问的规则。例如manager.xml
的以下内容将允许所有机器访问:
<Context privileged="true" antiResourceLocking="false"
docBase="$catalina.home/webapps/manager">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^YOUR.IP.ADDRESS.HERE$" />
</Context>
注意Valve
元素的allow 属性是一个正则表达式,它匹配连接主机的IP 地址。因此,用您的 IP 地址替换 YOUR.IP.ADDRESS.HERE(或其他一些有用的表达式)。
其他Valve
类满足其他规则(例如RemoteHostValve
用于匹配主机名)。早期版本的 Tomcat 使用 Valve 类 org.apache.catalina.valves.RemoteIpValve 进行 IP 地址匹配。
完成上述更改后,在访问管理器 URL 时,您应该会看到一个身份验证对话框。如果您输入您在tomcat-users.xml
中提供的详细信息,您应该可以访问管理器。
【讨论】:
如何在不关闭和启动tomcat的情况下加载这些配置更改? 403 访问被拒绝 在tomcat 8中,您不需要做任何事情,这些配置更改立即生效。 经过几次尝试终于为我工作了。我试图在 context.xml 文件中进行更改,而更改是在路径“conf/Catalina/localhost”manager.xml 文件中进行的。如果它不存在,只需创建一个。 对于 tomcat 8.5.37,我还必须包括:对于Tomcat v8.5.4及以上版本,文件<tomcat>/webapps/manager/META-INF/context.xml
进行了调整:
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
</Context>
更改此文件以评论Valve
:
<Context antiResourceLocking="false" privileged="true" >
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
</Context>
之后,刷新浏览器(无需重启Tomcat),即可看到管理页面。
【讨论】:
在 8.5.0 中工作,但需要重新启动。谢谢! 我不得不等待大约 10-15 秒,但在 8.5.11 中不需要重新启动。谢谢! 在 8.5.9 中工作,无需重新启动。但是,在 Windows 7 机器上应用大约需要 15 秒。谢谢! 403 访问被拒绝 对于 Tomcat 初学者,关于这个问题的一个重要事实是 Tomcat 使用多个context.xml
文件。 Tomcat 的默认错误页面中的说明以 编辑管理器的上下文.xml 文件 可以更清楚地表述为编辑 Manager 应用程序目录中的 context.xml 文件。以上是关于从不同的主机访问 Tomcat Manager App的主要内容,如果未能解决你的问题,请参考以下文章