Приключения nginx и php-fpm

Ставлю на VDS'ку nginx, как самое лучшее и гибкое решение. В целом установка nginx достаточно проста (apt-get install nginx), но всё же нам нужно как-то обрабатывать наши любимые PHP скрипты. В этом нам и поможет PHP-FPM.

PHP-FPM (FastCGI Process Manager) — патч к PHP, предоставляющие альтернативный интерфейс FastCGI. Используется в проектах с высокими нагрузками или дефицитом ресурсов (как и на моём маленьком VDS).

Откуда брать PHP-FPM? Самому собирать? Лень! Искать готовые пакеты? Да, можно и так. А вдруг есть репозитарий в котором уже есть собранные пакеты? Надо искать...
Оп! А вот и такой репозитарий — dotdeb.org!

Давайте же скорее всё это ставить и настраивать!

Что мы имеем в начале? Просто работающий Debian lenny (да и Ubuntu должна сойти под это дело) с настроенным apt-get. Ну, обо всём по порядку.

0. Подключаем нужные нам репозитарии. Я буду ставить nginx из testing, потому как в stable он очень старый. Так что первым делом я сделаю вот что (если у вас уже сделано, то пропускаем пару абзацев):

echo 'deb http://mirror.yandex.ru/debian/ testing main contrib non-free' > /etc/apt/sources.list.d/testing.list
echo 'deb-src http://mirror.yandex.ru/debian/ testing main contrib non-free' > /etc/apt/sources.list.d/testing.list

Тут адрес зеркала — по вашему желанию. Теперь закрепляем релиз, чтобы вся система не обновилась до testing:

echo 'APT::Default-Release "stable";' > /etc/apt/apt.conf.d/default

Дальше надо подключить репозитарии dotdeb.org. Я сразу выбрал репозитарий с PHP 5.3, если хотите, то измените php53.dotdeb.org на packages.dotdeb.org:

echo 'deb http://php53.dotdeb.org lenny all' > /etc/apt/sources.list.d/dotdeb.list
echo 'deb-src http://php53.dotdeb.org lenny all' > /etc/apt/sources.list.d/dotdeb.list

Ключи репозитария:

gpg --keyserver keys.gnupg.net --recv-key 89DF5277
gpg -a --export 89DF5277 | sudo apt-key add -

А теперь обновляемся:

apt-get update

1. Устанавливаем nginx, php-fpm и прочая... nginx устанавливаю из testing:

apt-get install -t testing nginx

А теперь «пых» со всеми нужными, как мне кажется, модулями (которые PECL):

apt-get install -t '5.3*' php5-common php5-cli php5-suhosin
apt-get install -t '5.3*' php5-fpm php5-cgi php5-xcache php5-memcache

Вот тут внимание! Я ставлю с -t '5.3*', так как мне нужен именно PHP 5.3. Насколько это всё верно не берусь судить, но я не смог поставить на систему вышеперечисленное из репозитариев dotdeb.org без этого. Или дело в отсутствии ключа, или ещё какие-то другие проблемы. Но так у меня установилось.

2. Настраиваем nginx. Тут всё индивидуально, я дам лишь минимум для работы с PHP. Надо определить место расположения сайта и логов, создать файлы и каталоги, а потом настраивать ваш конкретный конфиг. Для взаимодействия с fastcgi я выбрал сокеты. Практично же. Поэтому добавим этот минимум для обработки PHP в свой конфиг nginx (по умолчанию /etc/nginx/sites-available/default):

              location ~ \.php$ {
                      fastcgi_pass   unix:/var/run/php-fpm/default.socket;
                      include fastcgi_params;
                      fastcgi_index  index.php;
                      fastcgi_param  SCRIPT_FILENAME  /var/www/путь$fastcgi_script_name;
              }

3. Настравиваем php-fpm. Конфиг /etc/php5/fpm/php.ini настраиваем по желанию, а в конфиге /etc/php5/fpm/php5-fpm.conf нужно указать сокет:

Address to accept fastcgi requests on.
Valid syntax is 'ip.ad.re.ss:port' or just 'port' or '/path/to/unix/socket'
<value name="listen_address">/var/run/php-fpm/default.socket</value>

4. Стартуем.

/etc/init.d/php-fpm start
/etc/init.d/nginx start

Если при запуске всё нормально, то проверяем работу:

echo '<?php phpinfo() ?>' > /var/www/путь/phpinfo.php

И смотрим страничку http://ваш.хост/phpinfo.php. Если отобразилось инфо о PHP, то у нас всё работает, если нет, смотрим логи и исправляем ошибки.

А дальше начинается игра со скриптами, с конфигами и прочим. Спасибо за внимание.

Подпишитесь на обновления блога по RSS, Email или Twitter!

Оставить комментарий

XHTML: Вы можете использовать эти теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">