我正在尝试在新的 Ubuntu 22.04 虚拟机上将 Apache 设置为反向代理。我们在 Ubuntu 18.04 上有一个现有的 Apache 反向代理,其中一切工作正常。这个新的反向代理应该会取代我们旧的反向代理,但虚拟主机似乎无法正常工作。
我已完成以下操作:
apt-get update
apt-get upgrade
apt-get install apache2
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_balancer
a2enmod lbmethod_byrequests
我在站点启用中禁用了默认页面。
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
我在 Windows PC 上创建了一个主机文件条目来测试这个非常基本的配置是否有效,它指向我的 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 地址以找到正确的接口。