部分资产间歇性出现 404,LAMP 堆栈

部分资产间歇性出现 404,LAMP 堆栈

我们有一个 LAMP 堆栈 WordPress 服务器,可以正确提供大多数资产。但是,一个插件的 CSS 文件和几个图像大约有 20% 的时间返回软 404。我在访问日志中找不到任何关于 404 的引用,但浏览器肯定从某个地方(我猜是 WordPress)收到了 404 响应。

当我使用与站点 URL 不匹配但能解析到资产路径的别名 URL 时,资源 100% 都能正确加载。但是,使用站点 URL 只能解析选定的有问题的资产,解析率只有 20%。

您可以在此处测试其中一个有问题的资产:http://www.mreco.org/wp-content/uploads/2014/05/zero-cost.jpg

然而别名链接始终能够正确解析:http://mr-eco.wordpress.promocampaigns.com/wp-content/uploads/2014/05/zero-cost.jpg

奇怪的是,如果我尝试访问服务器上肯定不存在的过时内容,则在实时 URL 上,它大约有 50% 的时间会返回内容。使用别名链接,它会 100% 的时间返回 404 错误 - 这是正确的行为。

错误日志和 PHP 错误日志很干净。

对实时直接链接进行多次刷新后得到的示例访问日志(取自grep 'zero-cost.jpg' /var/log/httpd/mr-eco-access_log)(我没有看到任何 404 错误):

10.166.202.202 - - [28/May/2014:20:27:41 +0000] "GET /wp-content/uploads/2014/05/zero-cost.jpg HTTP/1.1" 304 -
10.166.202.202 - - [28/May/2014:20:27:42 +0000] "GET /wp-content/uploads/2014/05/zero-cost.jpg HTTP/1.1" 304 -
10.166.202.202 - - [28/May/2014:20:27:43 +0000] "GET /wp-content/uploads/2014/05/zero-cost.jpg HTTP/1.1" 304 -
10.166.202.202 - - [28/May/2014:20:27:43 +0000] "GET /wp-content/uploads/2014/05/zero-cost.jpg HTTP/1.1" 304 -
10.176.201.37 - - [28/May/2014:20:27:56 +0000] "GET /wp-content/uploads/2014/05/zero-cost.jpg HTTP/1.1" 200 57027

Chrome 的开发工具在显示 404 页面内容之前列出了以下网络活动:

zero-cost.jpg /wp-content/uploads/2014/05 GET 404 Not Found text/html Other 15.9 KB 73.2 KB 953 ms 947 ms

我的 Apache 配置是标准的,我已将虚拟主机条目和 .htaccess 文件列在下面。如有必要,我可以提供 Apache 配置的其他部分。

虚拟主机:

<VirtualHost *:80>
    DocumentRoot /var/www/public_html/mr-eco.wordpress.promocampaigns.com
    ServerName www.mreco.org
    ServerAlias mreco.org mr-eco.wordpress.promocampaigns.com
    ErrorLog logs/mr-eco-error_log
    CustomLog logs/mr-eco-access_log common
    <Directory /var/www/public_html/mr-eco.wordpress.promocampaigns.com>
        AllowOverride All
        SetOutputFilter DEFLATE
    </Directory>
</VirtualHost>

.htaccess 文件:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

我检查了多个 A 记录,并可以确认有一个指向该域的 A 记录:

;; ANSWER SECTION:
mreco.org.      60  IN  A   50.18.58.174

我对系统管理还不太熟悉,完全不知道是什么原因造成的。过去,资产不一致的 404 错误都是因为负载均衡器后面的实例不同步。在本例中,负载均衡器后面只有一个实例。

由于不一致,感觉像是缓存问题。我们不使用 Apache 缓存,据我所知 WordPress 也不应该缓存。

我目前所做的:

  • 重置 WordPress 永久链接
  • 已禁用 WordPress 插件
  • 重新生成的 WordPress .htaccess 文件
  • 交换 ServerName 和 ServerAlias 指令
  • 清除浏览器缓存
  • 确认资源的磁盘位置
  • 检查 PHP、访问和错误日​​志
  • 确认 DNS 设置正确(如有必要可发布)

我完全不知所措。谢谢你的帮助!

更新

奥卡姆剃刀原理适用。确实,负载均衡器下存在多个不同步的实例。我最初只是查看了错误的负载均衡器。感谢您的时间。

相关内容