Итак, тормоза «нагнули» сервак — поисковые роботы и прочая нечисть создаёт очень нехилую нагрузку, с которой в последнее время серваку справляться всё труднее и труднее, а последние дни сообщения о недоступности сайтов просто поставили вопрос ребром.
Специфика некоторых моих проектов это несколько тысяч справочных файлов, и всё это реализовано на связке nginx + apache.
После изучения нескольких хороших статеек (в конце поста приведу ссылки) и неудачной попытки задействовать кэширование NGINX (разбираться с этим не стал, т.к. нашел более правильное решение проблемы) я понял, что самые тормоза — из-за allow override индейца! без которого реврайты htaccess не работают. Собственно, при любом обращении к сайту индеец перечитывает всю файловую структуру — а это с моими тысячами файлов — полная засада. Умножаем количество запросов на несколько десятков в минуту — получаем ступор всего сервака.
Единственное правильное решение — переход на fastcgi, в лице php-fpm, который не обрабатывает htaccess (при этом все правила переносятся «руками» на уровень фронтенда т.е. nginx сервера).
Правда и тут не без подводных камней — немного пришлось переписать движек сайтов т.к. реврайт nginx-a несколько другой по сравнению с реврайтом на htaccess в плане передачи заголовков php.
Тут большое спасибо ребятам с форума php.ru за помощь в моей ветке.
При обработке текущего положения нужно использовать ТОЛЬКО параметр REQUEST_URI — остальные, по крайней мере у меня, не передаются! вернее передаётся фактический обработчик index.php
После перехода на Fast-CGI страничка начала отдаваться где то в 20 раз быстрее, и нагрузка на сервер спала пропорционально. Сообщения о недоступности сайтов сошли на нет.
Цель достигнута!
Хорошие статейки:
Почему NginX с Fast-CGI быстрее, чем Apache с mod_php?
Попытка номер раз создать почти идеальный htaccess
Один конфиг Nginx для работы с кучей разных сайтов
Установка nginx, php-fpm и mysql на CentOS
ngin+php-fpm делаем веб-сервер под высокую нагрузку
Отдельно выделю очень хорошую статью на счёт кэширования nginx
у меня вроде завелось, но почему-то через часок другой, решение падало — может файла слишком у меня много — незнаю, но статья отличная — факт.
Прозрачное кэширование в nginx для всех и каждого
P.S. Ещё 2 проблемы было — не передавался GET в несуществующий php и не уходила почта
первое решилось добалением $is_args$args; в try_files
try_files $uri /index.php$is_args$args;
второе — указание sendmail_path в php-fpm.conf (сразу там до кучи путь для сессий поправил)