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

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-серверов для прослушивания app-dev не является вариантом, поскольку предполагается, что это точная копия (не мое решение ...)

Спасибо!

Возможно, вы могли бы использовать mod_headers вместе с mod_proxy. Но я не тестировал.

Итак, для вашего виртуального хоста app-dev у вас может быть:

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>

Добавьте в конфигурацию обратного прокси (для 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