![Apache 反向代理后面受 Cas 保护的站点](https://linux22.com/image/619869/Apache%20%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E5%90%8E%E9%9D%A2%E5%8F%97%20Cas%20%E4%BF%9D%E6%8A%A4%E7%9A%84%E7%AB%99%E7%82%B9.png)
我的设置是:
Cas 服务器(比如说 url
https://localhost:8443/cas-server/
)一个受 cas 保护的网站托管在 tomcat 服务器上,运行 cas 客户端(假设 (
https://localhost:4448/myApp
)一个 httpd apache2,带有 mod auth cas 和 proxy_http,用作反向代理。(
http://localhost:80
)
我想要做的是将反向代理配置为如下形式:
<Location /proxyTest >
ProxyPass https://localhost:4448/myApp
ProxyPassReverse https://localhost:4448/myApp
</Location>
然后就可以写
https://localhost/proxyTest
代替
https://localhost:4448/myApp
这很有效,我被重定向,我得到了 cas-ticket,我得到了身份验证等等。问题是,cas-login 页面 url 显示:
https://localhost:8443/cas-server/login?service=https%3A%2F%2Flocalhost%3A4448%2Fmyapp
登录后,我的浏览器中显示的 URL 是:
https://localhost:4448/myApp
因此重定向无法正常工作……在某个时候,我被送回了非代理 URL。很可能是 cas-client 所为。我该如何设置这样的代理才能正常工作,以便一旦我获得有效票证,所有这些都是透明的?
是否涉及使用 tomcat 的 AJP?或者配置和使用 cas-client 中神秘的 cas 代理回调功能,我从来不明白如何使用?还有其他吗?
答案1
ProxyPassReverse 指令用于重写 Apache 在重定向等情况下返回的 URL。请参阅这个问题以获得简洁的解释。
我认为你要找的是
<Location /proxyTest>
ProxyPass https://localhost:4448/myApp
ProxyPassReverse https://localhost/proxyTest
</Location>
这里您使用的是 http(s),所以不涉及 AJP。根据文档,AJP 不需要 ProxyPassReverse,因此你可以使用类似
<Location /proxyText>
ProxyPass ajp://localhost:4448/myApp
</Location>