我的一台 Debian 服务器上出现了一些非常奇怪的行为。当请求 stuff.com(示例)或 stuff.com/image.jpg 时,假设 50% 的时间我会得到正确的响应,另外 50% 的时间我会得到 404,就图像而言,如果我请求的是普通 HTML 文件,我会得到 apache 的默认页面。
这一切都始于我今天早上创建了一个新的虚拟主机,像往常一样配置了 DocumentRoot 和其他所有内容,突然我在刷新之间开始在图像上出现一些 404,有时我会得到 apache 的默认页面。
虚拟主机配置:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName stuff.com
DocumentRoot /var/www/html/stuff/stuff-test
<Directory /var/www/html/stuff/stuff-test >
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/apache2/stuff/stuff/error.log
CustomLog /var/log/apache2/stuff/stuff/access.log combined
</VirtualHost>
默认配置:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
这是一个使用 Symfony 制作的复杂网站,所以我认为它可能与此有关,因此在另一台服务器上安装了它,一切正常。然后我们开始进一步减少可能性,现在文件夹中只有一个 index.html 和一个 image.jpg,但仍然发生同样的事情。
除了使用 service apache2 restart 重新启动 Apache 之外,我们尝试了所有方法,我们通常使用重新加载。
值得注意的是,我们在此服务器上配置了 97 个虚拟主机,我们提高了相关虚拟主机和默认虚拟主机上的所有日志、apache(至 trace8)的级别。
我们还检查了 dmesg、/var/log/messages、/var/log/kern.log 和 /var/log/syslog。
当请求无法到达虚拟主机并转到默认虚拟主机时,任何日志中都不会出现任何有趣的内容。
另一个有趣的事实是,这只发生在新的虚拟主机上,我们尝试创建一堆虚拟主机,结果都相同,但在旧的虚拟主机上(今天之前创建的),一切都运行正常,没有问题。
服务器上没有任何变化(最后一次变化是 12 月 3 日),没有任何软件更新,没有重启,什么都没有。
我们今晚要重启 Apache,不想冒险在白天重启 Apache,然后突然所有网站都瘫痪了。看看会发生什么。
有人知道吗?
我们检查了以下项目(无特殊顺序):
- 重新启动了 php-fpm,但它是在请求单个文件或 *.html 文件时发生的,所以它不是来自那里。
- 检查 ulimit 以确保一切正常且没有达到任何限制。 - 搜索了我们能找到的每一个日志文件,这些文件可能指向任何地方,但什么也没找到。
软件版本:Debian:10.2
阿帕奇:Apache/2.4.38(Debian)
PHP:7.2.34(这并不重要)
答案1
解决方案是简单地重新启动 apache。
就像我在这里读到的一样,唯一的解决方案很少是重新启动 apache。
答案2
您应该运行apachectl -S
检查虚拟主机的加载顺序并检查虚拟主机是否正确加载。