Я хочу выполнить обратное проксирование поддомена на другое имя домена с тем же именем хоста.
Пример:
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
ответ не будет переведен.