我们有一个 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 设置正确(如有必要可发布)
我完全不知所措。谢谢你的帮助!
更新
奥卡姆剃刀原理适用。确实,负载均衡器下存在多个不同步的实例。我最初只是查看了错误的负载均衡器。感谢您的时间。