2016-12-02 118 views
0

我配置了我的apache,以便它可以将我的请求转发到外部URL,如google.com,但反向代理不起作用。反向代理外部URL - Apache

<VirtualHost *:443> 
ServerName authtest.com 
ProxyRequests Off 
ProxyPreserveHost On 
<Proxy *> 
    Order allow,deny 
    Allow from All 
</Proxy> 
<LocationMatch "/google"> 
    ProxyPass https://www.google.com/ 
    ProxyPassReverse https://www.google.com/ 
</LocationMatch> 
</VirtualHost> 

是否有可能为我反转代理外部网站?

回答

1

是否有可能为我反向代理外部网站?

是的,但有明显的缺点。

注意:当我尝试您的配置时,我在日志中获得了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),你会避免很多问题在这里。

+0

谢谢你这么多的详细说明。在我的项目中,Iam代理使用相同的域名,即authTest,但是不同的位置,如/ google到google.com和/ fb到facebook,传递了几个webistes。所以有我遇到问题的时候。 – user7044932

0

再检查一下这个GIT Repo 我分叉一个GIT回购和定制它与工作情景:

[browser] --(Host: google.local)--> [apache proxy] --(Host: google.nl)--> Google 

Apache的配置如下:

<VirtualHost *:80> 
     ServerName google.local 
    SSLProxyEngine on 
    ProxyRequests Off 
    <Proxy *> 
     Order allow,deny 
     Allow from All 
    </Proxy> 
     ProxyPass/https://www.google.nl/ 
     ProxyPassReverse/https://www.google.nl/ 

     ErrorLog /var/log/apache2/google.local-error.log 
     CustomLog /var/log/apache2/google.local-access.log combined 

</VirtualHost> 
+0

谢谢你的回应。它没有工作在我的情况下,因为Iam寻找/谷歌谷歌。 – user7044932