2016-12-02 3 views
0

Я настроил свой apache так, чтобы он мог перенаправить мои запросы на внешний URL-адрес, например google.com, но обратный прокси-сервер не работает.Обратный прокси для внешнего URL-адреса Apache

<VirtualHost *:443> 
ServerName authtest.com 
ProxyRequests Off 
ProxyPreserveHost On 
<Proxy *> 
    Order allow,deny 
    Allow from All 
</Proxy> 
<LocationMatch "/google"> 
    ProxyPass https://www.google.com/ 
    ProxyPassReverse https://www.google.com/ 
</LocationMatch> 
</VirtualHost> 

Возможно ли изменить обратные внешние веб-сайты?

ответ

1

Возможно ли изменить обратные внешние веб-сайты?

Да, но со значительными минусами.

Примечание: когда я попробовал вашу конфигурацию, я получил SSL Proxy requested for [...] but not enabled [Hint: SSLProxyEngine] в журналах, поэтому добавил SSLProxyEngine on.

выпуск Хост

При выполнении HTTP/1.1 запрос на сервер, вы автоматически добавить имя хоста в запросе. Когда прокси их, у вас есть два possibilites:

[browser] --(Host: authtest.com)--> [apache proxy] --(Host: authtest.com)--> Google 

или

[browser] --(Host: authtest.com)--> [apache proxy] --(Host: google.com)--> Google 

Первый является то, что вы получаете с ProxyPreserveHost On. Серверы Google не будут обрабатывать запросы для authtest.com, вы должны удалить эту строку.

Даже во втором случае у вас могут быть проблемы. ProxyPassReverse будет обрабатывать перенаправления, но только для данного домена: я во Франции, google.com перенаправляет меня в google.fr (другой домен), а обратный прокси не переписывает перенаправление.

Другая проблема - референт: если служба видит запросы на изображения/css/js, поступающие с другого веб-сайта, она может рассматривать ее как лининг полосы пропускания и блокировать их. Теперь вам нужно также переписать html ответа (mod_proxy_html поможет, но это не серебряная пуля).

Issue Path

В вашем примере, вы прокси <authtest> /Google в <Google> /. Как и выше, вам нужно переписать html: абсолютные ссылки/ресурсы не будут работать, если ваш сервер не добавит /google всюду. То же самое относится к относительным ссылкам/ресурсам (но с более краткими случаями). Если вам принадлежит сервер backend, вы могли бы проверить URL-адреса в файлах html/css/js. Здесь, если URL-адрес динамически создается в браузере с помощью js, вы ничего не можете сделать.

Если вы можете прокси / к / (или /whatever к /whatever) вы сможете избежать много проблем здесь.

+0

Большое спасибо за подробное описание.В моем проекте Iam proxy проходит несколько веб-мастеров, использующих одно и то же имя домена i.e authTest, но в разных местах, например/google to google.com и/fb, в facebook. Так что, когда у меня возникают проблемы. – user7044932

0

Chech это GIT Repo я раздвоенный на GIT Repo и настроить его для работы со сценарием:

[browser] --(Host: google.local)--> [apache proxy] --(Host: google.nl)--> Google 

Апач конфигурации следующим образом:

<VirtualHost *:80> 
     ServerName google.local 
    SSLProxyEngine on 
    ProxyRequests Off 
    <Proxy *> 
     Order allow,deny 
     Allow from All 
    </Proxy> 
     ProxyPass/https://www.google.nl/ 
     ProxyPassReverse/https://www.google.nl/ 

     ErrorLog /var/log/apache2/google.local-error.log 
     CustomLog /var/log/apache2/google.local-access.log combined 

</VirtualHost> 
+0

Благодарим за отзыв. Он не работал в моем случае, поскольку я ищу/google для google. – user7044932

Смежные вопросы