为了更好地了解反向代理,我决定将我的私有云服务器用作反向代理服务器,并尝试绕过公司防火墙(当我在工作时)以允许自己访问 Gmail。
我想出了以下代理配置(请不要介意方括号):
SSLProxyEngine 已开启 ProxyRequests 关闭 ProxyVia 关闭 [代理人 *] 命令拒绝、允许 全部拒绝 允许来自 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
上述配置的结果如下:
当我导航到 myserver.com/qqq 时,后端服务器 (Google) 只是更改 URL 并将我重定向到 google.com。尽管我已“ProxyPreserveHost On”
当我导航到 myserver.com/qqqqq 时,Google 会 301 返回到我的代理服务器,然后再次将我重定向到 Google,最终我陷入了循环。
我已经阅读了 stackoverflow 上的许多帖子,但无法从中提取任何有用的信息:
https://stackoverflow.com/questions/5277107/apache-reverse-proxy-changes-url
https://stackoverflow.com/questions/6385638/proxy-pass-follow-redirect-on-server
我的问题是:
如何防止 Google 更改 URL,而是透明地显示内容
我该怎么做才能避免我的代理服务器和 Google 之间出现 301 循环
如果你认为我遗漏了什么或误解了什么,请告诉我
谢谢你,亚历克斯
答案1
我已经通过以下代码完成了此操作。你可以尝试一下...
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>