我配置了我的apache,以便它可以将我的请求转发到外部网址,例如google.com,但反向代理无法正常工作。
numberOfRowsInSection
我可以反向代理外部网站吗?
答案 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>