Назад | Перейти на главную страницу

Периодическая ошибка 404 на выбранных объектах, стек LAMP

У нас есть сервер 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 тоже не должен кэшировать.

Что я уже сделал:

Я в полной растерянности. Спасибо, что помогли мне!

Обновить

Применяется бритва Оккама. Действительно, было несколько несинхронизированных экземпляров под балансировщиком нагрузки. Сначала я просто смотрел на неправильный балансировщик нагрузки. Спасибо за ваше время.