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

как мне изменить прокси имя хоста поддомена на другое имя домена?

Я хочу выполнить обратное проксирование поддомена на другое имя домена с тем же именем хоста.

Пример:

fitzefatze.sourcedomain.com должен получить содержимое:

fitzefatze.targetdomain.com

Он должен быть динамическим, чтобы каждое имя хоста переводилось в имя целевого домена.

Я думаю, это можно сделать с помощью директивы ProxyPass, но я не знаю, как получить имя хоста для цели:

что-то вроде этого ServerName * .sourcedomain.com

ProxyRequests Off
<Proxy *>
    AddDefaultCharset off
    Order deny,allow
    Allow from all #
</Proxy>

ProxyPass / $1.targetserver.com

Есть директива ProxyPassMatch, но она указывает следующее ограничение:

Аргумент URL-адреса должен обрабатываться как URL-адрес перед заменой регулярного выражения (а также после). Это ограничивает количество совпадений, которые вы можете использовать. Например, если бы мы использовали

ProxyPassMatch ^ (/.*. Gif) $ http://backend.example.com:80001 доллар

в нашем предыдущем примере при запуске сервера возникала синтаксическая ошибка. Это ошибка (PR 46665 в bugzilla ASF), и обходной путь состоит в том, чтобы переформулировать соответствие:

ProxyPassMatch ^ / (. *. Gif) $ http://backend.example.com:8000/1 доллар

Я не знаю, примет ли он http: //$1.targetserver.com в качестве действительного URL перед заменой - попробуйте и дайте нам знать!

Как упоминал Шейн, вы также можете использовать mod_rewrite, но вы должны знать, что проксирование, выполняемое mod_rewrite, не использует пул соединений - каждый новый запрос будет создавать новое прокси-соединение на лету. Поэтому вы не сможете воспользоваться преимуществами постоянного пула соединений, выполняемого ProxyPass, а также не сможете точно настроить его поведение с помощью параметров пула соединений, которые предоставляет ProxyPass (keepalive, timeout, connectiontimeout, retry, min / max , и т.д.).

Обратите внимание, что, похоже, нет соответствующей директивы ProxyPassReverseMatch для любой из альтернатив.

Для этого вам нужно использовать mod_rewrite..

RewriteCond %{HTTP_HOST} ^(.*)\.sourcedomain\.com$
RewriteRule ^/(.*)$ http://%1.targetdomain.com/$1 [P,L]

.. и имейте в виду, ProxyPassReverse не будет работать здесь так что любой 30x ответ не будет переведен.