Связка Wordpress+Apache+nginx

Поборол довольно интересный глюк, возникающий при работе “связки” из Wordpress, Apache и nginx.

Для начала расскажу, как в Wordpress устроен “планировщик”. Естественно, многие хостеры всячески ограничивают доступ пользователя к системе. Поэтому выполняемые на хостинговых аккакунтах скрипты не могут полагаться на такие вещи, как cron – стандартный юниксовый планировщик задач. Кстати, некоторые извращенцы запускают Wordpress под Windows, где никакого крона нет и никогда не было.

Разработчики скриптов извращаются, как могут. Например, в Wordpress все устроено следующим образом: при обращении к страницам сайта вызывается функция spawn_cron(), которая, если имеются “запланированные” события, в свою очередь обращается GET-запросом к файлу wp-cron.php, используя fsockopen(). ИМХО, механизм более чем странный, но почему-то использующийся.

Мое внимание привлекло большое количество ошибок 499, которые awstats определял, как Unknown Error, в статистике сайта. Оказалось, что они возникают из-за наличия у хостера nginx, который не перенаправляет запрос Apache, если соединение было закрыто слишком быстро – раньше, чем сервер успел прочесть заголовки. При этом в лог пишется 499 ошибка.

Естественно, wp-cron.php не запускается, что несколько бесит. Например, не работает автоматическое создание бекапа базы данных по расписанию.

Как лечить досадное недоразумение? Необходимо всего лишь исправить файл wordpress-dir/wp-includes/cron.php – перед выходом из функции spawn_cron() добавить небольшую задержку.

Было:

function spawn_cron() {

//skipped some code

if ( $argyle )
fputs( $argyle,
"GET {$parts['path']}?check=" . wp_hash('187425') . " HTTP/1.0\r\n"
. "Host: {$_SERVER['HTTP_HOST']}\r\n\r\n"
);

}

Стало:

function spawn_cron() {

//skipped some code

if ( $argyle )
fputs( $argyle,
"GET {$parts['path']}?check=" . wp_hash('187425') . " HTTP/1.0\r\n"
. "Host: {$_SERVER['HTTP_HOST']}\r\n\r\n"
);

usleep(100000); //100ms wait for nginx
}

После такого патча wp-cron работает нормально.

18 комментариев

  1. ProCurator пишет:

    С днем рождения! Желаю здоровья и счастья, удачи и успехов!

  2. Александр пишет:

    Версия 2.8.4
    Симптомы такие же.
    отложенные публикации пропускаются и база не бэкапится (плагин для wp)

    Где и что нужно изменить? Заранее спасибо.

  3. autoforcer.ru пишет:

    Доля Ленца из за мягкой http://www.autoforcer.ru подвески не дает погонять. Движок низкооборотистый быстрый жрет от 15 до 20 ДТ

  4. antiunemployment.ru пишет:

    Вакансии и работа в Москве и Петербурге – скажем нет безработице http://www.antiunemployment.ru

  5. gta-city.ru пишет:

    Большая коллекция модов, машин, прохождений, дополнений, карт, читов, патчей, сохранений, секретов http://gta-city.ru для игр GTA San Andreas и GTA 4. GTA San Andreas год выпуска 2005 год

  6. regionygoroda.ru пишет:

    Какое расстояние от границы Франции и до границы Нидерландов http://www.regionygoroda.ru самое близкое ?

  7. itvopros.ru пишет:

    Скажите, что нужно сделать, чтобы открыть http://www.itvopros.ru папку подключенной к компьютеру флешки?

  8. animalplant.ru пишет:

    Как ухаживать за домашними http://www.animalplant.ru хризантемами? Подскажите, пожалуйста!

  9. avto-buyer.ru пишет:

    Объявления о продаже автомобилей http://www.avto-buyer.ru

  10. fyntik.net пишет:

    ЮМОР и Avast! — антивирусное программное обеспечение, которое может найти http://fyntik.net вирусы на жестком диске ПК, в его памяти, в загрузочных секторах и т.д.

  11. listik.net пишет:

    Glary Utilities – это функциональный набор системных твикеров и утилит, МУЗЫКА для тонкой настройки, повышения общего уровня http://listik.net производительности и защиты ПК

  12. pylnovse.ru пишет:

    Стена зашевелилась? Она подаёт вам знаки? Ещё и брыкается? Не расстраивайтесь и не спешите звонить в “ноль-три” http://www.pylnovse.ru

  13. iconect.ru пишет:

    Дизайнеры из FROG Design разработали вот такую маску на лицо, которая может замещать то, что вы увидели, услышали http://www.iconect.ru или почувствовали носом на любое другое ощущение

Ответить

Или воспользуйтесь входом по OpenID: