Все запросы отправляются на первый (по умолчанию) виртуальный хост
Мы пробуем обратный прокси между 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). Мы должны заменить его, как только мы настроим этот сервер и будем работать нормально.
Когда я даю IP-адрес старого сервера в браузере, приложения работают нормально. Почему его не удалось на этом сервере? Нужна ли мне дополнительная настройка для этого?
Как отображается имя сервера?
Забыл упомянуть, что 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. Спасибо!!