我尝试了一些自定义“默认”Apache vhost 的方法,但似乎没有任何效果,我总是得到服务/var/www/html/index.html
而不是我想要显示的其他内容或错误。
但最奇怪的是:每个访问日志都被记录到/var/log/apache2/other_vhosts_access.log
而不是/var/log/apache2/access.log
。
我试过重置我的安装通过完全删除 Apache(不确定这是否足够)...
systemctl stop apache2
apt-get remove --purge apache2
rm -rf /etc/apache2
rm -rf /var/log/apache2
rm -rf /var/www/html
deluser --remove-home www-data
apt autoremove
...然后重新安装它并只更改端口(因为我使用 nginx 作为反向代理):
apt install apache2
sed -i 's/Listen 80/Listen 8080/' /etc/apache2/ports.conf
所以我现在有只有一个现有vhost存在于此安装中:(000-default.conf
处于其原始状态)并且处于活动状态(已选中apache2ctl -S
)。
即使在那之后,对我的 Web 服务器的任何调用仍然会由 nginx 重新路由到 Apache(没问题),并且仍然会将任何内容记录到/var/log/apache2/other_vhosts_access.log
,这表明(据我理解)vhost 不是由 Apache 触发的(这不行)。
它不是一个“catchall”虚拟主机吗?它应该由发送给它的任何标头触发Host
?为什么在这种情况下它不会被触发?
apache2.conf
我对进行了一些测试,LogLevel debug
并研究了/var/log/apache2/error.log
和/var/log/syslog
,但我没有看到任何看似相关的内容(如果你们中有人认为这可能会有帮助,我仍然可以发布整个内容)。
答案1
我是个白痴...问题是由与默认安装唯一不同的东西引起的!
如果 Apache 没有监听端口 80,而是监听端口 8080(因为它位于拥有端口 80 访问权限的 nginx 反向代理后面),则必须相应地设置所有 Apache 虚拟主机。
Apache conf 总是在两个地方提到端口:
Listen 80
在/etc/apache2/ports.conf
<VirtualHost *:80>
在所有 vhosts 中/etc/apache2/sites-available/*.conf
(或sites-enabled
)
要更新两者的端口:
# Replace "Listen 80" by "Listen 8080" in ports.conf
sed -i '/^Listen 80$/ s/80/8080/' /etc/apache2/ports.conf
# Replace "<VirtualHost *:80>" by "<VirtualHost *:8080>" in all vhosts
sed -i 's/:80>/:8080>/' /etc/apache2/sites-available/*.conf