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

Как я могу перенаправить URL-адреса с помощью прокси-модуля в Apache?

Это кажется очень простым вопросом, но мне трудно найти простое решение, поэтому благодарю за любую помощь и терпение в этом вопросе:

Я хочу настроить свой прокси-сервер Apache для перенаправления определенных URL-адресов, чтобы, например, HTTP-запрос веб-браузера для www.olddomain.com передавался на прокси-сервер, который затем направляет запрос на www.newdomain.com, который отправляет ответ на прокси-сервер, который затем передает его обратно в веб-браузер.

Кажется настолько простым, но я не вижу, как этого добиться на Apache. Я знаю, что Squid / Squirm предлагает эту функциональность, поэтому предполагаю, что мне не хватает чего-то действительно простого. Я знаю, что могу использовать RewriteRule для динамического изменения URL-адреса и передачи его на прокси-сервер, но я действительно хочу сделать обратное, когда прокси-сервер получает исходный URL-адрес, применяет RewriteRule, а затем перенаправляет HTTP-запрос на новый URL.

Надеюсь, это имеет смысл. Заранее благодарю за любую помощь.

Из вашего комментария к моему предыдущему ответу я понимаю, что вы используете Apache в качестве прокси-сервера пересылки (ProxyRequests On). Ты можешь использовать mod_rewrite чтобы прокси проходил через определенные URL.

Вероятно, у вас в конфигурации Apache есть что-то вроде этого:

ProxyRequests On
ProxyVia On
<Proxy *>
   Order deny,allow
   Allow from xx.xx.xx.xx
</Proxy>

Затем вам нужно добавить следующее, чтобы передавать все запросы от www.olddomain.com/foo к www.newdomain.com/bar:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.olddomain\.com$
RewriteRule /foo(.*)$ http://www.newdomain.com/bar/$1 [P,L]

Что это значит:

  • Когда делается запрос к хосту www.olddomain.com, то RewriteRule будет стрелять.
  • Это правило заменяет /foo к http://www.newdomain.com/bar/.
  • Замена передается mod_proxy (P).
  • Прекратить переписывать (L).

Пример результата:

  • Браузер настроен на использование вашего Apache в качестве прокси-сервера.
  • Он просит www.olddomain.com/foo/test.html.
  • Ваш Apache перепишет это на www.newdomain.com/bar/test.html.
  • Он запросит эту страницу у ответственного веб-сервера.
  • Верните результат в браузер как www.olddomain.com/foo/test.html.

Если я правильно вас понял, вы, вероятно, захотите посмотреть: mod_proxy в сочетании с виртуальными хостами на основе имен

Вот небольшой пример того, как это может выглядеть. Все запросы с виртуального хоста www.olddomain.com будут запрашиваться с www.newdomain.com и перезаписываться apache:

NameVirtualHost *:80
<VirtualHost *:80>
     ServerName www.olddomain.com

     <Proxy *>
            Order deny,allow
            Allow from all
     </Proxy>
     ProxyPass / http://www.newdomain.com/
     ProxyPassReverse / http://www.newdomain.com/
     ProxyPassReverseCookieDomain www.newdomain.com www.olddomain.com 
</VirtualHost>