为什么来自我的子域名的重定向最终会到达我的主域名?

为什么来自我的子域名的重定向最终会到达我的主域名?

我有一个自定义子域,当使用 Java 的 HttpServletResponse::sendRedirect() 时,它会被重定向到我们的主要(子)域,但我不确定为什么。https://custom.example.com/originUrl/SignOnPage 上的用户会被重定向到 https://main.example.com/requestedUrl/GoToReporting,他们在那里没有会话并且被注销。

我的问题: 当同时使用 F5 和 apache mod_rewrite 和/或 mod_proxy 时,应该在哪里管理子域处理、重定向和/或 SSL 配置?如果不明确写入/删除特定于子域​​的配置,哪些更改可能会导致此操作停止工作?

细节: 我目前的理论是,导致此重定向停止工作的原因是与 SSL/HTTPS/HSTS 相关的问题,很可能是在 F5 中。根据下面的链接,sendRedirect() 会导致 HTTPS 变为 HTTP,并且似乎当发生这种情况时,HTTP 连接会在“主”域重新建立。我无法访问 F5 配置,对此知之甚少。管理 F5 的部门坚持认为 F5 中没有任何变化,并且影响此重定向的任何事情都必须由 java 代码或 apache 更改引起,需要通过这些方式解决。我认为他们错了。请帮忙澄清。

在 Apache 中,我们使用 mod_proxy、mod_rewrite 和其他几个模块可以会影响这一点,但任何 apache 配置文件中都没有对任何(子)域名的引用。但是,我还是尝试实施 RewriteConds 和 RewriteRules 来防止子域名更改,但这没有任何影响(我可能做错了什么……[P] / [R,L] 的内容令人困惑,我 95% 确定这方面没有任何变化)。

Java 代码不是问题所在。Java 代码中没有任何变化(通过测试一年前的版本验证了这一点或影响了这一点)。但我可以轻松地用 Java 解决手头的问题(请参阅下面的替代解决方案)。

详细信息和诊断: 浏览器看到:

一般的
请求 URL:https://custom.example.com/requested/url/GoToReporting
请求方法:GET
状态代码:302 已临时
移动 远程地址:172.19.x.189:443
引荐来源政策:no-referrer-when-downgrade

响应标头
连接:保持活动
内容长度:0
内容类型:text/html;字符集=UTF-8
日期:2018 年 11 月 27 日星期二 18:29:15 GMT 保持活动:超时=15,最大=97
位置:http://main.example.com/Reporting
设置 Cookie:TS..01=.....dae9;路径=/
严格传输安全:最大年龄=16070400;includeSubDomains

当来自 https://custom.example.com/originUrl/SignOnPage 的请求执行 window.location.href = "/requestedUrl/GoToReporting" 时,该请求会命中 java 应用程序中的 HttpServlet,它包含以下内容:

请求 url:http:// main.example.com/requestedUrl/GoToReporting 请求 uri:/requestedUrl/GoToReporting
主机:jbossappserver05:8080 引用者:https:// custom.example.com/originUrl/SignOnPage

x-forwarded-for:172.17.x.19, 172.19.x.6
x-forwarded-host:custom.example.com
x-forwarded-server:localhost
连接:Keep-Alive

笔记: 在我的示例中,我已将域名替换如下:main.example.com 是大多数客户的主要登录页面,custom.example.com 是特定于特定客户的登录页面

GoToReporting 页面执行 SendRedirect("http://main.example.com/Reporting”)

我在示例 URL 中放置了空格,因为我不能有超过 8 个链接...它们不是真正的链接...

替代解决方案: 解决该问题的一个“解决方案”是通过正则表达式从请求中截取 referer,然后手动附加请求 uri,但出于多种原因,这是错误且糟糕的。请求 URL 在到达 Java 时就已经是错误的了。

另一种方法是修改 Java 代码以不使用 sendRedirect()。这适用于我目前的情况,但我们确实有其他地方使用 sendRedirect(),需要解决这些问题,最好不要通过 Java。

进一步阅读/参考: http://www.knowledgefolders.com/akc/display?url=DisplayNoteMpURL&reportId=1711&ownerUserId=satya

答案1

当同时使用 F5 和 apache mod_rewrite 和/或 mod_proxy 时,应该在哪里管理子域处理、重定向和/或 SSL 配置?

只要您决定在一个位置进行此操作,那么在哪里都无所谓。

我个人的建议是 F5,因为通常会有比 Apache 更多的 Web 和应用服务器,这样无论后端服务器的功能如何,您的所有策略都将保持一致

相关内容