Я пытаюсь настроить 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-адрес, чтобы найти правильный интерфейс.