Apache proxy_http перенаправить на ip и установить имя хоста
Надеюсь , вы, ребята, можете помочь мне с проблемой прокси у меня.
Что у меня уже есть
Я настроил обратный прокси-сервер apache http для запросов прокси от *.proxy.domain к *.intern.domain. Apache - единственный способ получить доступ к моим внутренним веб-приложениям из внешней сети.
Пример:
app.proxy.domain -> app.intern.domain
mail.proxy.domain -> mail.intern.domain
Это все прекрасно работает, но у меня есть следующая проблема.
проблема
Я хочу прокси следующие запросы:
app.proxy.domain -> app.internal.domain
app-dev.proxy.domain -> app-dev.internal.domain
Это не проблема, но, к сожалению, сервер app-dev выполняет точную копию веб-приложения серверов приложений, и это веб-приложение отвечает только на его имя хоста (app.intern.domain)
Итак, что мне нужно сделать, это прокси
app.proxy.domain -> app.internal.domain (10.0.1.1)
app-dev.proxy.domain -> app.internal.domain (10.0.1.2)
Я могу сделать второе, добавив "10.0.1.2 app.internal.domain" в /etc/hosts, но это также означает, что app.proxy.domain попадет на dev-сервер.
Я ищу опцию, чтобы установить запись / etc / hosts только внутри файла конфигурации vhost для app-dev.proxy.domain, чтобы любая другая конфигурация vhost просто использовала DNS для app.intern.domain.
Мысли...
Есть ли способ сказать конфиг apache, чтобы
ProxyPass / http://10.0.1.2/
но отправить app.intern.domain в качестве имени хоста?
Редактирование веб-приложения dev-server для прослушивания app-dev не вариант, так как предполагается, что это точная копия (не мое решение...)
Спасибо!
3 ответа
Возможно, вы могли бы использовать mod_headers в сочетании с mod_proxy. Я не проверял это все же.
Так что для вашего app-dev vhost вы можете иметь:
RequestHeader set Host "app.internal.domain"
и тогда вы добавите:
ProxyPreserveHost On
Гадкий обходной путь - использовать (скорее злоупотреблять) файл /etc/hosts, чтобы указать app.internal.domain на localhost, а затем настроить Apache для прослушивания двух дополнительных портов, по одному для каждого вашего приложения и app-dev. Итак, обратный прокси дважды:
Listen 80
Listen 127.0.0.1:8001
Listen 127.0.0.1:8001
<VirtualHost *:80>
ServerName app.proxy.domain
ProxyPass / http://app.internal.domain:8001
</VirtualHost>
<VirtualHost *:80>
ServerName app-dev.proxy.domain
ProxyPass / http://app.internal.domain:8002
</VirtualHost>
<VirtualHost 127.0.0.1:8001>
ServerName app.internal.domain
ProxyPreserveHost On
ProxyPass / http://10.0.1.1/
</VirtualHost>
<VirtualHost 127.0.0.1:8002>
ServerName app.internal.domain
ProxyPreserveHost On
ProxyPass / http://10.0.1.2/
</VirtualHost>
Добавьте к конфигурации обратного прокси (foe app-dev.proxy..):
RequestHeader edit Host ^app-dev.proxy.domain app.proxy.domain
Вы должны предварительно включить mod_headers:
a2enmod headers
Внутренний сервер 10.0.1.2 должен иметь
ServerName app.proxy.domain