Apache VirtualHosts не работает/перенаправляет? (Обратный прокси)

Apache VirtualHosts не работает/перенаправляет? (Обратный прокси)

Я пытаюсь настроить Apache как обратный прокси на новой виртуальной машине Ubuntu 22.04. У нас есть существующий обратный прокси Apache на Ubuntu 18.04, где все работает как задумано. Этот новый обратный прокси должен заменить наш старый, но виртуальные хосты, похоже, работают неправильно.

Я сделал следующее:

apt-get update
apt-get upgrade
apt-get install apache2
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_balancer
a2enmod lbmethod_byrequests

Я отключил страницу по умолчанию в sites-enabled.

a2dissite 000-default.conf

Затем я создал новый виртуальный хост и включил его.

vi 001-trupage.azmedien.ch.conf
a2ensite 001-trupage.azmedien.ch.conf

Выглядит это так:

<VirtualHost trupage.azmedien.ch:80>
    ServerName trupage.azmedien.ch
    ProxyPreserveHost On
    ProxyPass / http://10.200.0.130/
    ProxyPassReverse / http://10.200.0.130/
</VirtualHost>

Затем я перезапустил и перезагрузил Apache.

systemctl restart apache2
systemctl reload apache2

Я создал запись в файле host на своем ПК с Windows, чтобы проверить, работает ли эта простая конфигурация. Она указывает на мой сервер Apache.

Когда я затем пытаюсь зайти на trupage.azmedien.ch, он перенаправляет меня на сайт Apache по умолчанию вместо того, чтобы перенаправить меня на нужный сервер (который определяется с помощью ProxyPass на виртуальном хосте).

Кажется, он по какой-то причине не распознает виртуальный хост? Когда я заменяю "trupage.azmedien.ch:80" на "*:80" и затем открываю его в браузере, ProxyPass работает. Но, очевидно, это не то, что мне нужно, так как будет несколько виртуальных хостов.

<VirtualHost *:80>
    ServerName trupage.azmedien.ch
    ProxyPreserveHost On
    ProxyPass / http://10.200.0.130/
    ProxyPassReverse / http://10.200.0.130/
</VirtualHost>

Вот вывод apache2ctl -S, 213.146.11.131 — это IP-адрес старого обратного прокси-сервера, но я понятия не имею, откуда он взялся и почему он здесь отображается:

root@azprox10:~# apache2ctl -S
AH00558: apache2: Could not reliably determine the server's fully qualified doma                                                                                                                               in name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress th                                                                                                                      is message
VirtualHost configuration:
213.146.11.131:80      is a NameVirtualHost
         default server localhost (/etc/apache2/sites-enabled/001-trupage.azmedi                                                                                                                               
         en.ch.conf:1)
         port 80 namevhost localhost (/etc/apache2/sites-enabled/001-trupage.azm                                                                                                                               
         edien.ch.conf:1)
         port 80 namevhost opvsg.chmedia.ch (/etc/apache2/sites-enabled/002-opvs                                                                                                                               
         g.chmedia.ch.conf:1)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex rewrite-map: using_defaults
Mutex proxy: using_defaults
Mutex default: dir="/var/lock/apache2" mechanism=fcntl
Mutex watchdog-callback: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33

решение1

Вам не нужно имя DNS в <VirtualHost>строке. <VirtualHost *:80>Это нормально, у вас может быть несколько имен, важна директива ServerName.

Запись в <VirtualHost>строке определяет только интерфейс, на котором Apache должен слушать. Если вы введете здесь имя хоста, Apache попытается преобразовать его в IP-адрес, чтобы найти правильный интерфейс.

Связанный контент