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

Динамические виртуальные хосты с другим внутренним портом в Apache

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

Я бы хотел избежать генерации нового виртуального хоста каждый раз, когда это происходит, и вместо этого полагаться на схему именования (поддомены основаны на числовом выражении).

Итак, допустим, домен будет promotion-4321.example.com и внутренний сервер будет прослушивать порт 4321

Могу ли я создать конфигурацию apache, которая извлекает 4321 от имени хоста (и ловит все promotion-XXXX.example.com) и использует его для прямого запроса на серверную часть порта 4321 ?

Прежде всего вам нужно перехватить все запросы к серверу на виртуальном хосте:

<VirtualHost *:80 *:443>
# [ Server Domain ]
ServerName localhost
ServerAlias *
...

Затем вам нужно создать правило, чтобы улавливать нужную вам информацию.

...
RewriteCond %{HTTP_HOST} promotion-(.*?)\.example\.com
RewriteRule (.*) http://backend.example.com:%1$1 [P,QSA]
...
  • %1 будет переменной, уловленной регулярным выражением RewriteCond
  • $1 будет текущим запросом URL, перехваченным регулярным выражением RewriteRule

Если вы не хотите использовать правило перезаписи, вы можете использовать ProxyRemoteMatch:

ProxyRemoteMatch promotion-(.*?)\.example\.com http://backend.example.com:$1