我到处寻找但找不到针对以下情况的明确解决方案:
我们有一个 Web 应用程序(Grails + Spring Security),在 apache 后面的 tomcat 中运行。Part应用程序的一部分需要在 https 上运行,因此使用 Spring Security Channel Security,每当您导航到应用程序的安全部分时,Spring 都会将您重定向到带有 302 状态代码的 https。
现在,tomcat 已设置为了解 https 和证书,因此它知道如何处理 ssl。事实上,当通过直接访问 url 和端口来直接访问 tomcat 来绕过 apache 时,一切都 100% 正常。
现在把apache放在tomcat前面的时候问题就来了。我们目前拥有的 apache 配置对于应用程序的非安全部分工作得很好。我们使用 mod_jk 来代理 apache 和 tomcat。
然而,一旦您尝试进入应用程序的安全部分,Spring 就会重定向您,它会命中
<VirtualHost _default_:443> ... </VirtualHost>
apache 配置的一部分...这就是问题开始的地方。
根据我的阅读,apache 可以通过 mod_jk 将 ssl 处理传递给 tomcat。但我们似乎无法获得正确的配置。由于 tomcat 已经为 ssl 设置了,它知道证书在哪里,并且设置了 Spring Security,因此我们希望 tomcat 处理所有 ssl,而 apache 只是将其典当给 tomcat。
这有可能吗,还是我错过了什么?有人对如何设置有明确的说明吗?任何帮助将不胜感激。
我们正在使用 Apache 2.2 和 tomat 7.0.27
Thanks
您不能仅将 SSL/TLS 流量从 Apache 中继到 Tomcat。您的 SSL 连接以 Apache 结束,然后您应该将流量反向代理到 Tomcat(SSL 在这种情况下很少有用),或者让客户端直接连接到 Tomcat 并让它处理 SSL 连接。
我不确定你在哪里读到过mod_jk
可以将 SSL 连接本身传递给 Tomcat。它需要直接中继套接字,因此绕过了所使用的 AJP 协议mod_jk
(顺便一提mod_proxy_ajp
是新的方式,甚至mod_proxy_http
).
如果您希望 Tomcat 处理 SSL 请求,我不确定为什么您希望 Apache 位于 Tomcat 前面。如果这与端口号或其他内容有关,请使用防火墙规则将端口 443 转发到 Tomcat 端口。
此外,请注意这些从 HTTP 到 HTTPS 的自动重定向的完成方式:它们仅在发出初始 HTTP 请求后发生 https://stackoverflow.com/a/9105894/372643.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)