Назад | Перейти на главную страницу

При использовании обратного прокси-сервера бэкэнд-сервер 301 возвращается к прокси-серверу или меняет URL

В качестве обучающего упражнения, чтобы лучше понять обратный прокси. Я решил использовать свой частный облачный сервер в качестве обратного прокси-сервера и попытаться обойти корпоративный брандмауэр (когда я на работе), чтобы получить доступ к Gmail.

Я придумал следующую конфигурацию прокси (пожалуйста, не обращайте внимания на квадратные скобки):

SSLProxyEngine on
ProxyRequests Off
ProxyVia Off

[Proxy *]
    Order deny,allow
    Deny from all
    Allow from xxx.xxx.xxx
[/Proxy]

ProxyPreserveHost On

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. Что я могу сделать, чтобы не попасть в цикл 301 между моим прокси-сервером и Google

Если вы думаете, что я что-то пропустил / упустил / неправильно понял, дайте мне знать

Спасибо алекс

Я сделал это с помощью следующего кода. Можешь попробовать...

    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>