是否有可能为我反向代理外部网站?
是的,但有明显的缺点。
注意:当我尝试您的配置时,我在日志中获得了SSL Proxy requested for [...] but not enabled [Hint: SSLProxyEngine]
,因此我添加了SSLProxyEngine on
。
主机问题
当你犯了一个HTTP/1.1请求到服务器时,会自动在请求中添加主机名。当您代理他们,你有两个possibilites:
[browser] --(Host: authtest.com)--> [apache proxy] --(Host: authtest.com)--> Google
或
[browser] --(Host: authtest.com)--> [apache proxy] --(Host: google.com)--> Google
第一个就是你ProxyPreserveHost On
得到。谷歌服务器不会处理authtest.com
的请求,你应该删除这一行。
即使在第二种情况下,您也可能遇到问题。 ProxyPassReverse
将处理重定向,但只针对给定的域:我在法国,google.com将我重定向到google.fr(不同的域),反向代理不重写重定向。
另一个问题是引用者:如果服务看到来自不同网站的图像/ css/js的请求,它可能会将其视为带宽泄漏并阻止它们。现在,您还需要重写响应的HTML(mod_proxy_html将有所帮助,但它不是银色子弹)。
路径问题
在你的榜样,你代理<authtest> /谷歌向谷歌< > /。像上面一样,你需要重写html:绝对链接/资源将无法工作,除非你的服务器在每个地方添加/google
。相同的链接/资源也是如此(但边缘情况更多)。如果您拥有后端服务器,则可以在html/css/js文件中检查url。在这里,如果url是使用js在浏览器中动态构建的,那么您无法执行任何操作。
如果你可以代理/
到/
(或/whatever
到/whatever
),你会避免很多问题在这里。
谢谢你这么多的详细说明。在我的项目中,Iam代理使用相同的域名,即authTest,但是不同的位置,如/ google到google.com和/ fb到facebook,传递了几个webistes。所以有我遇到问题的时候。 – user7044932