【问题标题】:Reverse proxy for external URL - Apache外部 URL 的反向代理 - Apache
【发布时间】:2016-12-02 17:48:47
【问题描述】:

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

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

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

【问题讨论】:

    标签: apache reverse-proxy


    【解决方案1】:

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

    是的,但有很大的缺点。

    注意:当我尝试你的配置时,我在日志中得到了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(不同的域)并且反向代理不会重写重定向。

    另一个问题是引用:如果服务看到来自不同网站的图像/css/js 请求,它可能会将其视为带宽窃取并阻止它们。现在,您还需要重写响应的 html(mod_proxy_html 会有所帮助,但它不是灵丹妙药)。

    路径问题

    在您的示例中,您将 /google 代理到 /。像上面一样,您需要重写 html:除非您的服务器在任何地方添加 /google,否则绝对链接/资源将不起作用。相对链接/资源相同(但有更多边缘情况)。如果您拥有后端服务器,则可以检查 html/css/js 文件中的 url。在这里,如果url是在浏览器中使用js动态构建的,那你什么都做不了。

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

    【讨论】:

    • 非常感谢您的详细描述。在我的项目中,Iam 代理使用相同的域名(即 authTest)传递几个网站,但使用不同的位置,例如 /google 到 google.com 和 /fb 到 facebook。所以当我遇到问题时。
    【解决方案2】:

    查看此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>
    

    【讨论】:

    • 感谢您的回复。在我的情况下它不起作用,因为我正在寻找 /google 到谷歌。
    猜你喜欢
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多