Ошибка 403 и yandex bot

Недавно начало много появляться ошибок 403 в логах и в yandex webmaster. Это сильно сказалось на позициях сайта. Cамое печальное — вылетела из поиска главная страница.

_config.yml

Методом гугления и научного тыка удалось найти в чем суть проблемы — KeepAlive в apache

Keep-alive позволяет по одному соединению прогнать несколько запросов. С точки зрения клиента - экономиться время на установление соединения. С точки зрения сервера - расходуются лишние ресурсы на поддержание соединения, причём самое неприятное, что расходуются даже после того, как клиент скачал страницу со всеми её картинками. Браузер не закрывает соединения и, если пользователь перейдёт по ссылке на странице, то запрос пойдёт по всё тому же старому соединению.

Получается, что yandex bot открывает сессию, и в рамках этой сессии запрашивает страницы с сайта A и с сайта B, от пользователя A. Естественно mpm_itk его посылает нафиг к 403 матери 🙂

Проблема возникает в таком сочетании Apache+ mpm_itk много сайтов от разных изолированных пользователей + Keep-alive. Существует несколько решений:

  1. В настройках apache выставить KeepAlive Off
  2. Разрешить пользователям читать друг у друга файлы
  3. nginx

Недостатки первого метода — небольшое увеличение времени загрузки сайта, особенно если много всяких мелких файлов (js, css, картинки). У правильно оптимизированного сайта разница в загрузке времени будет минимальным. Если это не так, есть повод заняться наконец-то сайтом.

Во втором случае всё печально. Особого смысла в разных пользователях маловато. С тем же успехом можно запускать в разных virtualHost от одного пользователя.

Ну о третьем способе и говорить особо нечего — всё просто работает.

Written on November 6, 2013