外部URL的反向代理- Apache

rqenqsqc  于 2022-11-16  发布在  Apache
关注(0)|答案(2)|浏览(159)

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

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

是否可以反向代理外部网站?

nvbavucw

nvbavucw1#

是否可以反向代理外部网站?
是的,但有明显的缺点。
注意:当我尝试您的配置时,我在日志中得到了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会有所帮助,但不是银的)。

路径问题

在本例中,将 /google代理为**/**。除非你的服务器在所有地方都添加了/google,否则绝对链接/资源是不会工作的。相对链接/资源也是一样的(但是有更多的边缘情况)。如果你拥有后端服务器,你可以在html/css/js文件中检查url。在这里,如果url是在浏览器中使用js动态创建的,你什么也做不了。
如果您可以将/代理到/(或将/whatever代理到/whatever),则可以避免许多问题。

ijxebb2r

ijxebb2r2#

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>

相关问题