好的,让我快速解释一下我的问题。我有一个 JEE Programm 在我的 tomcat 服务器上运行。服务器在 tomcat-users.xml 中定义了一些用户当我在本地机器上测试我的程序时,一切正常。
但是,如果我在我的服务器上部署 .war 并且我想访问 Rest 端点,我会收到 401 未经授权的错误。如果我删除用户安全检查,我可以正常使用该程序。所以 URL 和服务器设置是正确的。
我认为这个问题与通过我的 apache 转发 tomcat 有某种关系。
所以让我们假设我有一个运行在 http://myIp.de 上的 apache
然后我使用以下 apache 配置转发 tomcat:
ProxyRequests off
ProxyPass /tomcat http://localhost:8181/ nocanon
ProxyPassReverse /tomcat http://localhost:8181/
所以现在我可以通过以下方式访问 tomcat:http://myIp.de/tomcat 我也可以通过以下方式与我的应用“对话”:tomcat/myApp
但不知何故,身份验证现在失败了。我认为问题是 某种程度上与错误的上下文路径有关。因为tomcat/管理器 也无法登录。
最佳答案
通过在 tomcat 上的 /tomcat
下部署您的应用程序,让您的生活更轻松。这样就不需要路径转换。请记住,您将获得与特定路径相关联的所有 session cookie,并且此路径在转发到客户端后不一定会被转换。
另外,迟早你可能需要
ProxyPreserveHost On
(查找)或利用 mod_jk
自动保留此 header (和更多信息)。
编辑:根据您的评论,Basic Auth header 似乎也不会转发到 tomcat。我自己没有尝试过这个,但我查找的所有地方似乎都暗示会有一些重复(例如 Apache 的第二个凭证文件)——这看起来不太好。在这种情况下,我建议尝试使用 mod_jk 而不是 mod_proxy。您将使用 JkMount
指令,而不是 ProxyPass
并且需要一个 workers.properties,但是 mod_jk 在转发到 tomcat 时保持请求的完整上下文要好得多.到目前为止,我对它有很好的体验,只听到很少的提示——主要是在相当庞大和复杂/复杂的情况下。如果它能解决您的问题,至少您应该尝试一下。
关于apache - 通过 Apache 转发的 Tomcat 使用了错误的上下文路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34357161/