无法访问Tomcat 8管理应用程序

22

我刚在Ubuntu 14.04虚拟机上安装了Tomcat 8,但无法从浏览器访问http://[hostname]:8080/manager/html的管理应用程序。一旦我点击它就会出现“403 Access Denied”错误。我将Tomcat作为服务在/etc/init.d/tomcat8-dev的配置文件中定义。错误消息表明Tomcat最初设置为仅能从本地主机访问,但它是托管的虚拟机,无法在其上运行浏览器。

由于有多个人推荐,我在tomcat-users.xml文件中设置了一个用户。然而,我没有收到提示提供该用户的凭据,并且在默认页面上找不到任何类型的登录按钮。该文件当前看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
    version="1.0">

    <role rolename="manager-script"/>
    <role rolename="manager-jmx"/>
    <role rolename="manager-gui"/>
    <role rolename="manager-status"/>

    <user username="(redacted)" password="(redacted)" 
        roles="manager-gui,manager-jmx,manager-status,manager-script"/>
</tomcat-users>
阅读了Tomcat文档页面 这里 后,我尝试向 context.xml 中添加类似以下内容的<Valve /> 标签:

<Context privileged="true" antiResourceLocking="false"
    docBase="${catalina.home}/webapps/manager">

    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.0\.0\.1" />
    <!--Another valve for my local machine's IP-->

</Context>
然而,一旦我设置了privileged="true",无论我之后提供什么阀门,当我用浏览器连接到服务器时,都会得到一个空白页。
每当我做出更改时,我会使用sudo service tomcat8-dev restart重新启动我的服务。
基于我在这里和其他网站上阅读的帖子,我尝试了其他几件事情:
- 为我的Tomcat用户添加各种角色配置 - 在<Connector />标签内的server.xml中添加address="0.0.0.0" - 使用initctl而不是基于此处的说明设置服务,由于某种原因,这不会在我的服务器上加载默认页面 - 尝试不同的浏览器,并禁用弹出窗口拦截器
我尝试的所有方法都没有奏效。如果您想了解我情况的更多细节,请告诉我。有任何建议吗?
编辑:问题在于我正在编辑错误的context.xml文件。正确的文件位于tomcat/webapps/manager/META-INF中。 我错误地对tomcat/conf/context.xml进行更改。
7个回答

25
据我所知,Tomcat在默认配置下会阻止访问除本地主机以外的所有主机的Manager App(manager/html)。
若要能够通过http://[hostname]:8080/manager/html 访问管理界面,需要在 server.xml 和 Manager 应用程序的 context.xml 配置文件中进行配置: 步骤1:在[tomcat-install-dir]/conf/server.xml文件中编辑Connector元素,并添加您的IP地址,同时使用useIPVHosts =“true”,即:
<Connector port="9009" protocol="AJP/1.3" redirectPort="9443" 
           address="192.168.0.9" useIPVHosts="true" />

address="0.0.0.0"可能不是您想要插入的内容,因为它将管理器GUI暴露给网络上的所有计算机。

第二步:在[tomcat-install-dir] /webapps/manager/META-INF/context.xml中编辑Valve元素并添加您的IP地址:

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

    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
           allow="192\.168\.0\.9|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
</Context>

来自 Tomcat 8上下文文档

privileged : 设置为true以允许此上下文使用容器servlet,例如管理器servlet。

antiResourceLocking : 如果设置为true,则Tomcat将防止任何文件锁定。这会显著影响应用程序的启动时间,但允许在可能发生文件锁定的平台或配置上进行完全的Web应用程序热部署和卸载

请注意,我不像您尝试的事物列表中所提到的那样添加另一个Valve元素,而是编辑现有元素并只添加我的IP(192.168.0.9)。

步骤3:重新启动Tomcat,您应该能够使用localhost / 127.0.0.1以及您的主机名/ IP访问管理器GUI。


注意

关于您的tomcat-users.xmlTomcat Manager HOW-TO指出:

建议永远不要授予manager-script或manager-jmx角色给具有manager-gui角色的用户。

因此,您可能需要在tomcat-users.xml中引入两个用户,即:

  <role rolename="manager-script"/>
  <role rolename="manager-jmx"/>
  <role rolename="manager-gui"/>
  <role rolename="manager-status"/>
  <user username="alice" password="whatever" roles="manager-script,manager-jmx"/>
  <user username="bob" password="whatever" roles="manager-gui,manager-status"/>

谢谢你的帮助!事实证明我正在编辑错误的context.xml文件。我已经将细节编辑到原始问题中。 - Ecliptica
@ecliptica 很高兴听到现在它对你有用了 - 不用谢。 - Rudolf Held
1
{btsdaf} - Goutham Nithyananda
我按照答案中提出的更改建议,使用Tomcat9进行了更改,但仍然无法从任何浏览器运行Manager应用程序,这也是@GouthamNithyananda所经历的。 - Chris F
将主机名替换为Vagrant主机的IP地址。 它可以工作。 - vkrams

5
您可以直接这样做,以在所有机器上访问管理应用程序。 转到{Tomcat_install_DIR}/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>

1

你应该进行更改:

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

to:

docBase="${catalina.base}/webapps/manager"

这是因为您使用的不是来自上游的Tomcat,而是随Ubuntu一起提供的Tomcat。

需要修改哪个文件? - nanosoft

1
对于我而言,除了在tomcat-users.xml中添加具有管理角色的管理员用户外,我还必须修改webapps下manager和host-manager应用程序的2个/META-INF/context.xml文件,具体如下: 127 -> \d+ 这将使任何来自外部计算机浏览器的访问其管理站点将127 localhost IP更改为任何访问者IP

1

我认为这可能对你们所有人有帮助,因为它对我有效。

在这里我正在使用Apache tomcat 8:

root@akash-LIFEBOOK-A555:/opt/apache-tomcat-8.5.20/bin# ./version.sh 
Using CATALINA_BASE:   /opt/apache-tomcat-8.5.20
Using CATALINA_HOME:   /opt/apache-tomcat-8.5.20
Using CATALINA_TMPDIR: /opt/apache-tomcat-8.5.20/temp
Using JRE_HOME:        /DATA/jre1.8.0_131/
Using CLASSPATH:       /opt/apache-tomcat-8.5.20/bin/bootstrap.jar:/opt/apache-tomcat-8.5.20/bin/tomcat-juli.jar
Server version: Apache Tomcat/8.5.20
Server built:   Aug 2 2017 21:35:49 UTC
Server number:  8.5.20.0
OS Name:        Linux
OS Version:     4.4.0-98-generic
Architecture:   amd64
JVM Version:    1.8.0_131-b11
JVM Vendor:     Oracle Corporation

编辑tomcat-user.xml文件,添加角色和用户。
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="admin-gui"/>
<user username="admin" password="password" roles="manager-gui,manager-status,manager-script,manager-jmx,admin-gui"/>

0
我也遇到了同样的问题,我的解决方法是首先在config/tomcat-users.xml中添加用户和密码角色,然后在webapps/manager/META-INF/context.xml中允许我的公共IP。最初本地IP 127被添加以便从同一台机器上使用管理器。在那里添加你的IP。

听起来你已经解决了这个问题...我们能把它转化成一组步骤放在答案里吗? - benc

0

更新'apache-tomcat-8.5.5\webapps\manager\META-INF\context.xlm'文件。取消注释Value标签,并重新启动服务器。

context.xml文件

Before : 

<Context antiResourceLocking="false" privileged="true">
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
     allow="192\.168\.0\.9|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
</Context>

After change :

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

for auto deployment: go to 'apache-tomcat-8.5.5\conf\context.xml' and add antiResourceLocking="true" in 'Context' tag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接