作为一个学习练习,以便更多地了解反向代理。 我决定使用我的私有云服务器作为反向代理服务器,并尝试绕过企业防火墙(当我在工作时)让我自己访问Gmail。
我想出了下面的代理configuration(请不要介意方括号):
SSLProxyEngine on
ProxyRequestclosures
ProxyViaclosures
[代理 *]
命令否认,允许
全部否认
允许来自xxx.xxx.xxx
[/代理]
ProxyPreserveHost打开
ProxyPass / qqq https://www.google.com/accounts/ServiceLogin?service=mail
ProxyPassReverse / qqq https://www.google.com/accounts/ServiceLogin?service=mail
ProxyPass / qqqqq http://mail.google.com/mail
ProxyPassReverse / qqqqq http://mail.google.com/mail
上述configuration的结果如下:
当我导航到myserver.com/qqq时,后端服务器(Google)只是更改URL并将我redirect到google.com。 虽然我有“ProxyPreserveHost在”
当我导航到myserver.com/qqqqq时,Google会301回到我的代理服务器,它再次将我redirect到Google,最后在循环中结束。
我在这里阅读了一些post在stackoverflow,但不能从他们提取任何有用的信息:
https://stackoverflow.com/questions/5277107/apache-reverse-proxy-changes-url
https://stackoverflow.com/questions/6385638/proxy-pass-follow-redirect-on-server
https://stackoverflow.com/questions/1144286/how-to-tell-apache-in-reverse-proxy-mode-to-intercept-or-trap-302-responses-fro
我在这里的问题是:
如何防止Google更改url,而是透明地显示内容
我能做些什么才能在代理服务器和Google之间的301循环中结束
如果您认为我错过了/遗漏/误解了某些东西,请告诉我
谢谢Alex
我已经通过下面的代码做到了这一点。 你可以尝试一下…
ProxyPreserveHost On <Proxy *> AddDefaultCharset off Order deny,allow Deny from all Allow from all </Proxy> ProxyPass /google http://www.google.com/ ProxyHTMLURLMap http://www.google.com /google <Location /google> ProxyPassReverse / ProxyHTMLInterp On ProxyHTMLURLMap / /google RequestHeader unset Accept-Encoding </Location>