Nginx + Php-fpm на Centos
Этот пост больше для себя, чтобы не забыть, но кому то он может тоже оказаться полезным.
Задача стояла собрать на недорогом VDS конструкцию, не сильно потребляющую память под довольно наргуженную веб-приладу. Апач отпадал даже на бэкенде потому как очень уж он прожорлив. К тому же, в силу специфики моей прилады в бэкенде он тоже разрастался, хотя и не так сильно.
Поэтому было принято решение поднять чистый Nginx. Сам Nginx PHP не поддерживает, но позволяет подцепить его как cgi, что собственно и было реализовано.
Нужно сказать, что такая связка в зависимости от типа приложения (CMS) может давать где-то от 1.5 до 5 раз экономии памяти по сравнению с апачем и примерно во столько же раз быстрее работать. Но есть ограничения - большинство CMS по сути писаны под апач и их установка на “неродной” сервер требует некоторых танцев с бубном. Плюс Nginx не поддерживает некоторые фичи, которые есть в апаче (например .htaccess), опять же нужны ручные правки конфига. Поэтому область применения “чистого” Nginx ограничена и большее распространение получила связка Nginx-фронтенд <-> Apache-бэкенд. Как ставить ее на Cpanel/WHM я уже как то писал.
Тем не менее, бенифиты конфигурации очень значительны. Как же она собирается.
В качестве базовых были взяты две очень толковых статьи -
Для начала сносим апач, он нам больше не понадобится
rpm -e httpd –nodeps
тем же образом другие ненужные вам пакеты, я например вынес mysql, почту, спамассасин и еще какой то мусор.
Заводим юзера и группу от которой будет работать веб-сервер
groupadd www-data
useradd -g www-data www-data
Ставим nginx по конфиг в /usr/nginx/conf/nginx.conf
Меняем юзера nobody на www-data
Проверяем (service nginx start и смотрим на страничку “Welcome to Nginx”) - работает? Тогда раскомментируем кусок конфига про php и идем дальше.
Теперь по мануалу тупым копи-пастом ничего не выдумывая ставим php-fpm.
Поставили - подкладываем конфиги
В конфиге php-fpm.conf меняем юзера nobody на www-data, увеличиваем max_children (значение подбирается экспериментально под имеющуюся память, у меня 100). Если прилада имеет свойство течь (кривые скрипты и пр.), уменьшаем max_requests до сотни-другой.
Я также в обеих конфигах поменял listen address c /tmp/php-fpm.sock на 127.0.0.1:9000, на unix сокете почему-то не заработало, разбираться было лень.
Вот пожалуй и все.
За установку софта из тарболла на packet-oriented дистрибутив надо бить канделябрами.
Вполне вразумительно это сказали и до меня ;) http://centos.alt.ru/?p=96
В центе rpm+yum, правда? Вот и ставьте php-fpm, nginx и чего вам там еще надо _из_репозиториев_. Это идеологически правильно. А то мне вот досталось в наследство творение гениального _о_дмина на базе цента - не знаю, за какую часть тела хвататься… Солидная часть софта вот именно так вот втупую скомпилирована. Логи nginx, например, лежали в /etc/nginx/logs (привет Сысоеву - nginx из исходников ставится в совершенно гениально выбранные директории, поставить умолчания на /etc, /usr/bin и /var/log, например, он не озаботился… разумеется, все решается через configure… но это ж надо было, чтобы у _о_дмина руки росли из более правильного места…) и, разумеется, logrotate про них не знал. Судя по всему, их там регулярно терли вручную - там порядка гига в день логов генерировалось…
В общем, ужас, ужас, ужас… Чего там стоит - один Мелькор знает, как это обновлять - непонятно, что отвалится при обновлении системных библиотек - неизвестно…
Учитесь вникать в идеологию построения используемой вами системы, господа. И встраивать свои дополнения в систему в соответствии с этой самой идеологией. И вам проблем меньше будет, и тем, кто придет после вас…