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

标签 apache tomcat jakarta-ee

好的,让我快速解释一下我的问题。我有一个 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/

相关文章:

java - 404 Java 项目中的 Apache tomcat

Tomcat 不提示 Web 应用程序证书 (OpenAM)

PHP:创建某种公共(public)变量池,PHP 代码可以从中获取变量

java - YAWS 面向 Tomcat

apache - htaccess HSTS 阻止从 www.subdomain.domain.com 重定向到 subdomain.domain.com

rest - 没有为带有 jaxrs 的 rest-service 中的参数找到注入(inject)源

java - 特定于环境的配置文件 - 最佳实践?

apache - SSE(事件源): why no more than 6 connections?

java - 我应该使用哪个 Apache Tomcat 版本?

servlets - 如何在 Struts 2 应用程序中读取文本文件