外部URL的反向代理 - Apache

时间:2016-12-02 17:48:47

标签: apache reverse-proxy

我配置了我的apache,以便它可以将我的请求转发到外部网址,例如google.com,但反向代理无法正常工作。

numberOfRowsInSection

我可以反向代理外部网站吗?

2 个答案:

答案 0 :(得分:2)

  

我可以反向代理外部网站吗?

是的,但有明显的缺点。

注意:当我尝试配置时,我在日志中获得了SSL Proxy requested for [...] but not enabled [Hint: SSLProxyEngine],因此我添加了SSLProxyEngine on

主机问题

当您向服务器发出HTTP / 1.1请求时,会自动在请求中添加主机名。代理它们时,您有两种可能性:

[browser] --(Host: authtest.com)--> [apache proxy] --(Host: authtest.com)--> Google

[browser] --(Host: authtest.com)--> [apache proxy] --(Host: google.com)--> Google

第一个是ProxyPreserveHost On获得的结果。 Google服务器无法处理authtest.com的请求,您应该删除此行。

即使在第二种情况下,您也可能遇到问题。 ProxyPassReverse将处理重定向但仅针对给定的域:我在法国,google.com将我重定向到google.fr(不同的域),反向代理不会重写重定向。

另一个问题是引用:如果服务看到来自不同网站的images / css / js请求,它可能会将其视为带宽吸收并阻止它们。现在,你需要重写响应的html(mod_proxy_html会有所帮助,但它不是银弹)。

路径问题

在您的示例中,您将< authtest> / google 代理为< google> / 。如上所述,您需要重写html:绝对链接/资源将不起作用,除非您的服务器在任何地方添加/google。相对链接/资源相同(但边缘情况更多)。如果您拥有后端服务器,则可以在html / css / js文件中检查URL。在这里,如果使用js在浏览器中动态构建url,则无法执行任何操作。

如果您可以将/代理到/(或/whatever/whatever),则可以避免此处出现很多问题。

答案 1 :(得分:0)

Chech this GIT Repo 我分叉了一个GIT Repo并对其进行了定制以适应方案:

[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>