通过Apache转发的Tomcat使用错误的上下文路径

时间:2015-12-18 13:48:14

标签: apache tomcat java-ee

好的,让我快速解释一下我的问题。我在tomcat服务器上运行了JEE Programm。服务器在tomcat-users.xml中定义了一些用户当我在本地机器上测试我的程序时,一切正常。

但是,如果我在我的服务器上部署.war并且我想访问Rest Endpoint,我会收到401未经授权的错误。如果我删除用户安全检查我可以正常使用该程序。所以URL和服务器设置是正确的。

我认为问题在某种程度上与通过我的apache转发tomcat有关。

所以我假设我在http://myIp.de

上运行了一个apache

然后我使用以下apache config转发tomcat:

    ProxyRequests off
    ProxyPass /tomcat http://localhost:8181/ nocanon
    ProxyPassReverse /tomcat http://localhost:8181/

所以现在我可以通过http://myIp.de/tomcat到达tomcat 我也可以"说"通过我的应用程序:tomcat / myApp

但不知何故,身份验证现在失败了。我认为问题是 某种程度上与错误的上下文路径有关因为tomcat /经理 也无法登录。

1 个答案:

答案 0 :(得分:1)

通过在/tomcat下在tomcat上部署您的应用,让您的生活更轻松。这样就不需要路径转换了。请记住,您将获得与特定路径绑定的所有会话Cookie,并且一旦转发到客户端,此路径不一定会被翻译。

此外,迟早你可能需要

ProxyPreserveHost On 

(查找)或利用mod_jk自动保留此标题(及更多信息)。

编辑:发表评论后,基本身份验证标题似乎也不会转发给tomcat。我自己没有尝试过,但我所查看的所有地方似乎都暗示有一些重复(例如Apache的第二个凭证文件) - 看起来并不像好。在这种情况下,我建议尝试mod_jk而不是mod_proxy。您将使用JkMount指令而不是ProxyPass并且需要一个workers.properties,但mod_jk在转发到tomcat时保持请求的完整上下文要好得多。到目前为止,我对它有很好的经验,并且只听到很少的抱怨 - 主要是在非常庞大和复杂/复杂的情况下。至少你应该尝试解决你的问题。