我配置了我的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>
是否可以反向代理外部网站?
2条答案
按热度按时间nvbavucw1#
是否可以反向代理外部网站?
是的,但有明显的缺点。
注意:当我尝试您的配置时,我在日志中得到了
SSL Proxy requested for [...] but not enabled [Hint: SSLProxyEngine]
,所以我添加了SSLProxyEngine on
。主机问题
当您向服务器发出HTTP/1.1请求时,会自动在请求中添加主机名。当您代理它们时,有两种可能性:
或
第一个是
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
),则可以避免许多问题。ijxebb2r2#
Chech this GIT Repo我创建了一个GIT Repo并自定义它以使用场景:
Apache配置如下: