Обратный прокси-сервер apache: как переслать HTTP_HOST прокси-сервера

Для локальной настройки разработки требуется блок в DMZ, и у каждого разработчика есть своя строка в конфигурации apache для прокси. Выглядит примерно так:

ProxyPreserveHost on

ProxyPass /user1/ {user1's IP}
ProxyPassReverse /user1/ {user1's IP}

ProxyPass /user2/ {user2's IP}
ProxyPassReverse /user2/ {user2's IP}

#etc

Наши общедоступные URL становятся {DMZ server}/user1, {DMZ server}/user2и т. д . Проблема в том, что на полях разработчика значение $_SERVER['HTTP_HOST'] просто {DMZ server}без подкаталога пользователя. Желаемое поведение должно иметь /user%/ как настоящее имя хоста.

Я пытался переопределить переменную HOST и некоторые правила перезаписи, но ничего не помогло.

Создание поддоменов не вариант.

Спасибо за любую помощь!

3 ответа

Я собираюсь сделать удар и предложить это:

SetEnvIf Host (.*) custom_host=$1
RequestHeader set X-Custom-Host-Header "%{custom_host}e/%{REQUEST_URI}e/%{QUERY_STRING}e"

Надеемся, что это должно установить заголовок запроса с именем X-Custom-Host-Header, который вы можете затем получить в PHP. Если вы хотите, вы можете попытаться переопределить заголовок хоста, но я не уверен в последствиях этого. Заголовок Host является специальным заголовком HTTP и обычно содержит только часть узла HTTP-запроса, а не полный URL-адрес запроса.

К сожалению, не проверено, но было бы полезно, если бы вы могли более подробно уточнить, что вы ищете.

РЕДАКТИРОВАТЬ, ТРЕТИЙ ОТВЕТ:

Похоже, Apache уже слышал эту жалобу, и решение mod_substitute, Вы должны использовать его, чтобы переписать все URL-адреса, возвращенные в документе, чтобы вставить/user1/,

РЕДАКТИРОВАТЬ, ВТОРОЙ ОТВЕТ:

Основываясь на дополнительной информации в ваших комментариях, я бы сказал, что ваша конфигурация Apache на вашем сервере DMZ верна. Вы запрашиваете, чтобы машины разработчика генерировали URL-адреса, включающие их путь к контексту (который является термином J2EE для чего-то аналогичного вашему/user1/немного). У меня нет опыта работы с PHP, поэтому я не знаю, есть ли у него такая возможность, но быстрый поиск показывает, что это не так.

В противном случае вам придется свернуть собственную функцию, которая преобразует относительный URL-адрес в абсолютный URL-адрес, настроить его так, чтобы он мог добавить что-либо к имени хоста, а затем заставить всех использовать эту функцию исключительно для создания URL-адресов. В этой старой (устаревшей?) Статье о передовых практиках PHP см. Руководство "Как сделать местоположение вашего приложения независимым" для решения связанной с этим проблемы поиска локальных файлов.

ПРЕДЫДУЩИЙ ОТВЕТ: (не работает, вызывает цикл перенаправления)

Я до сих пор не понимаю, что вы пытаетесь сделать или что вы имеете в виду, говоря, что "в приложениях dev работают в основном apache и PHP, для размещения различных приложений", но, как обоснованное предположение, вы пробовали:

ProxyPass /user1/ {user1's IP}/user1/
ProxyPassReverse /user1/ {user1's IP}/user1/

Если бы я настраивал ту среду, которую вы, похоже, хотели бы иметь, я бы хотел $_SERVER['HTTP_HOST'] быть {DMZ server} на каждом компьютере разработчика, так что среда на компьютере разработчика выглядит (или, по крайней мере, больше похожа) на производственный код на нем.

Другие вопросы по тегам