В качестве обучающего упражнения, чтобы лучше понять обратный прокси. Я решил использовать свой частный облачный сервер в качестве обратного прокси-сервера и попытаться обойти корпоративный брандмауэр (когда я на работе), чтобы получить доступ к 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
Результаты вышеуказанной конфигурации следующие:
Когда я перехожу на 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-адрес и вместо этого прозрачно отображать контент
Что я могу сделать, чтобы не попасть в цикл 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>