У нас есть сервер WordPress со стеком LAMP, который правильно обслуживает большинство ресурсов. Однако CSS-файл одного плагина и несколько изображений возвращают мягкие 404 примерно в 20% случаев. Я не могу найти никакой ссылки на 404 в журналах доступа, но браузер определенно получает ответ 404 откуда-то (я полагаю, WordPress).
Когда я использую 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% случаев. Используя ссылку псевдонима, он 404 выдает 100% времени - правильное поведение.
Журнал ошибок и журнал ошибок 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 тоже не должен кэшировать.
Что я уже сделал:
Я в полной растерянности. Спасибо, что помогли мне!
Обновить
Применяется бритва Оккама. Действительно, было несколько несинхронизированных экземпляров под балансировщиком нагрузки. Сначала я просто смотрел на неправильный балансировщик нагрузки. Спасибо за ваше время.