Все запросы отправляются на первый (по умолчанию) виртуальный хост

Мы пробуем обратный прокси между apache 2.2.22 и tomcat-7. В моих файлах httpd.conf указано следующее:

NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /apps/httpd-2.2.22/docroot/app1/
ServerName app1.mycompany.com
ErrorLog logs/app1.mycompany.com.error_log
CustomLog logs/app1.mycompany.com.access_log common
......
.........
</VirtualHost *.80>

<VirtualHost *:80>
DocumentRoot /apps/httpd-2.2.22/docroot/app2/
ServerName app2.mycompany.com
ErrorLog logs/app2.mycompany.com.error_log
CustomLog logs/app2.mycompany.com.access_log common
....
......
</VirtualHost *.80>

Поскольку я все еще жду, чтобы получить сертификаты SSL, просто хотел проверить HTTP-запросы на данный момент. Я просто даю IP в браузере, чтобы проверить, все ли работает.

Запросы от браузера для обоих приложений отправляются на первый виртуальный хост.

http://1.2.3.4/app1  (Gives me the correct site)

http://1.2.3.4/app2  (Gives me wrong, as docroot it reads is of 1st host)

Если я удаляю запись виртуального хоста app1, то http://1.2.3.4/app2 работает нормально.

У нас уже есть та же самая установка, работающая на более старом сервере, поэтому я не указываю URL как http://app1.mycompany.com/app1 (давая имя сервера вместо IP). Мы должны заменить его, как только мы настроим этот сервер и будем работать нормально.

  1. Когда я даю IP-адрес старого сервера в браузере, приложения работают нормально. Почему его не удалось на этом сервере? Нужна ли мне дополнительная настройка для этого?

  2. Как отображается имя сервера?

Забыл упомянуть, что app1 и app2 работают на сервере Tomcat, который находится, скажем, на машине A, а веб-сервер apache находится на машине B. Мне нужно сделать некоторые настройки для этого? Детали сервера tomcat уже есть в worker.properties.

1 ответ

Решение

Если вы используете виртуальные хосты на основе имен, ServerName внутри раздела указывает, какое имя хоста должно отображаться в заголовке Host: запроса, чтобы соответствовать этому виртуальному хосту.

Источник: https://httpd.apache.org/docs/2.4/mod/core.html

Имя домена, которое вы вводите в браузере, отправляется на сервер в виде заголовка HTTP-запроса с именем "Host". Сервер выберет правильную конфигурацию виртуального хоста для каждого запроса, сопоставив ServerName значение и значение, присутствующее в заголовке HTTP-запроса "Host".

Если в наборе виртуальных хостов, содержащем наиболее конкретную комбинацию IP-адресов и портов, не найдено подходящего ServerName или ServerAlias, то будет указан первый виртуальный хост, который будет использоваться.

Источник: https://httpd.apache.org/docs/2.4/vhosts/name-based.html

В настоящее время сервер получает IP-адрес "1.2.3.4" в заголовке узла вместо домена "app2.mycompany.com", поэтому он обслуживает контент на основе конфигурации первого виртуального узла.

Решение. Протестируйте новый сервер, изменив файл hosts только на локальном компьютере. Добавьте следующие строки в файл hosts:

1.2.3.4 app1.mycompany.com
1.2.3.4 app2.mycompany.com

Теперь введите http://app2.mycompany.com/ в браузере на локальном компьютере, и разрешение DNS для "app2.mycompany.com" вернет IP-адрес вашего нового сервера. Таким образом, только на вашем локальном компьютере контент будет загружен с нового сервера. Для остального мира контент будет по-прежнему выбираться со старого сервера. Файл hosts находится по пути / etc / hosts в Linux и C:\Windows\System32\drivers\etc\hosts в Windows.

Я разобрался. Предоставил записи имени хоста в моем файле Windows host.ini, после чего смог получить доступ к приложениям. ИТ-команда подтвердила, что они поместят записи DNS на сервер Linux (на котором есть Apache), и он будет работать. Нидхи использую соединитель Apache mod_jk. Спасибо!!

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