Apache перенаправлення proxy_http на ip та встановити ім'я хоста


16

сподіваємось, ви, хлопці, можете допомогти мені у виникненні проблеми з проксі.

Що я вже маю

Я встановив зворотний проксі-апарат apache http для проксі-запитів від * .proxy.domain до * .intern.domain. Апаш - це єдиний спосіб досягти моїх внутрішніх веб-застосувань із зовнішньої мережі.

Приклад:

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.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 config, щоб

ProxyPass / http://10.0.1.2/

але надіслати app.intern.domain як ім'я хоста?

Редагування веб-застосунку dev-серверів для прослуховування app-dev не є варіантом, оскільки це повинна бути точна копія (не моє рішення ...)

Спасибі!

Відповіді:


34

Можливо, ви можете використовувати mod_headers спільно з mod_proxy. Я не перевіряв цього.

Тож для вашого додатка-розробника vhost ви могли мати:

RequestHeader set Host "app.internal.domain"

і тоді ви додасте:

ProxyPreserveHost On

2
Настройка ProxypreserveHost виконала трюк ідеально. Спасибі!
Деякий Linux Nerd

3

Некрасива обробка полягає у використанні (скоріше: зловживанні) / etc / hosts, щоб вказати app.internal.domain на localhost, а потім налаштувати Apache для прослуховування двох додаткових портів, по одному для кожного додатка та додатка-розробника. Отже, зворотний проксі двічі:

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>

2

Додати до конфігурації проксі-сервера (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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.