【问题标题】:Access Tomcat Manager App from different host从不同的主机访问 Tomcat Manager App
【发布时间】: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 文件并访问管理器应用程序?

【问题讨论】:

    标签: tomcat


    【解决方案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,使用与默认文件相同的语法: 这允许从本地网络 192.168.250.0/24 中的所有主机访问
    • 这个答案是唯一一个指定 YOUR.IP.ADDRESS.HERE 的答案 - 因此真正回答了从不同主机访问管理器应用程序的问题,而不仅仅是从互联网上的任何地方。恕我直言,这应该是公认的答案。改进建议:将 2.a 移至顶部,可选添加@ThomasLIMIN 的建议。
    • 我显然不希望我的主机被世界上任何地方访问,只有我的电脑,所以,我会赞成这个答案。
    【解决方案2】:

    因为我必须努力学习,默认的 \etc\tomcat\server.xml 文件(至少适用于 OpenSUSE v15.2 上的 v9.0.36)已经包含了管理器和主机管理器应用程序的 &lt;Context ...&gt;&lt;Valve ...&gt; 定义!这些显然推翻了您可能在其他地方定义的任何context.xmlmanager.xml 文件。默认情况下,他们限制对 localhost 的访问,这正是我所看到的。 ||-( 因此,需要调整server.xml 中的设置,或者在那里删除/评论它们,然后可以像以前一样添加其他响应中提到的文件。

    【讨论】:

    • 您可能想提及您使用的是哪个 Linux 发行版:Debian 的软件包,例如没有没有在/etc/tomcat/server.xml 中定义Tomcat Manager,而是在/etc/tomcat/Catalina/localhost/manager.xml 中定义,就像在其他答案中一样。
    • 我将其添加到我的回复中。感谢您指出这一点!
    【解决方案3】:

    以下两种配置对我有用。

    1. 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"/>
    
    1. /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,我还必须包括:
    【解决方案5】:

    对于Tomcat v8.5.4及以上版本,文件&lt;tomcat&gt;/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 文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多