使用反向代理时,后端服务器向代理服务器发送 301 响应或更改 URL

使用反向代理时,后端服务器向代理服务器发送 301 响应或更改 URL

为了更好地了解反向代理,我决定将我的私有云服务器用作反向代理服务器,并尝试绕过公司防火墙(当我在工作时)以允许自己访问 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

上述配置的结果如下:

  1. 当我导航到 myserver.com/qqq 时,后端服务器 (Google) 只是更改 URL 并将我重定向到 google.com。尽管我已“ProxyPreserveHost On”

  2. 当我导航到 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

https://stackoverflow.com/questions/1144286/how-to-tell-apache-in-reverse-proxy-mode-to-intercept-or-trap-302-responses-fro

我的问题是:

  1. 如何防止 Google 更改 URL,而是透明地显示内容

  2. 我该怎么做才能避免我的代理服务器和 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>

相关内容