Установка NGINX, PHP 5.3.10 и PHP-FPM на CentOS 5.7 — 6.2 или избавляемся от Apache

9 Фев
2012

Предисловие
Не так давно передо мной стоял выбор: Apache, Apache+NGINX или NGINX+PHP-FPM? Я никак не мог определится что же использовать под свои проекты, я около недели собирал информацию и сравнивал, но это мне тоже не помогло — мнений было огромное количество и все они расходились. Конечно все это понятно, что под каждый проект нужно искать свое решения исходя из требований. Подумав ещё несколько деньков посоветовался со знакомым и решил — Apache и связку NGINX+Apache уже использовал, по этому поставлю я на свой страх и риск NGINX+PHP-FPM.


Приступим к установке
Процесс установки никаких сложностей не вызывает, но все равно постараюсь описать все максимально наглядно. Первым делом нужно избавится от старой версии PHP и Apache, если есть в наличие.

1. Подготовка. Подключаем нужные репозитории.

rpm -Uvh http://download.fedora.redhat.com/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

Далее создаем файл /etc/yum.repos.d/nginx.repo и добавляем в него следующее содержимое:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

Сохраняем его. А теперь можно перейти к следующему шагу, непосредственно к установке.

2. Установка NGINX, PHP 5.3.10 и PHP-FPM.

yum install nginx php php-fpm php-common


3. Устанавливаем модули PHP. Это может быть любой набор исходя из того что Вам требуется.

Для себя я выбрал следующие модули:
PEAR (php-pear), PDO (php-pdo), MySQL (php-mysql), PostgreSQL (php-pgsql), Memcache (php-pecl-memcache), Memcached (php-pecl-memcached), GD (php-gd), XML (php-xml), MBString (php-mbstring), MCrypt (php-mcrypt)
Для начала этого вполне достаточно.

yum --enablerepo=remi install php-pecl-apc php-cli php-pear php-pdo php-mysql php-pgsql php-pecl-mongo php-sqlite php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml


4. Запускаем NGINX и PHP-FPM.

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

Или же так, кому как нравится

service nginx start
service php-fpm start


5. Добавляем в автозагрузку.
NGINX:

chkconfig --add nginx
chkconfig --levels 235 nginx on

PHP-FPM:

chkconfig --add php-fpm
chkconfig --levels 235 php-fpm on


6. Настраиваем NGINX
Я приведу минимальные работающие настройки, статей по настройке NGINX имеется очень большое количество.

Создаем директории где будет размещаться наш сайт и логи.

mkdir -p /home/web/www/site.ru/public_html
mkdir /home/web/site.ru/logs
chown -R nginx:nginx /home/web/www/site.ru

Теперь создаем директории в /etc/nginx для хранения виртуальных хостов.

mkdir /etc/nginx/sites-available
mkdir /etc/nginx/sites-enabled

Добавляем в /etc/nginx/nginx.conf после строки include /etc/nginx/conf.d/*.conf следующее:

include /etc/nginx/sites-enabled/*;

Добавляем виртуальный хост, для этого нужно создать файл в /etc/nginx/sites-available/ с именем домена в моем случае это site.ru и добавляем в него такое содержимое:

server {
server_name site.ru;
access_log /home/web/www/site.ru/logs/access.log;
error_log /home/web/www/site.ru/logs/error.log;
root /home/web/www/site.ru/public_html;

location / {
index index.html index.htm index.php;
}

location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/web/www/site.ru/public_html$fastcgi_script_name;
}
}

Делаем ссылку на виртуальный хост и перезагружаем NGINX:

cd /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/site.ru
service nginx restart

Добавляем в /etc/host виртуальный хост. Должно выглядеть примерно так:

127.0.0.1 localhost site.ru

Для внешнего IP примерно по такой же схеме.

7. Проверяем NGINX и PHP-FPM.
Создадим в /home/web/www/site.ru/public_html/ файл index.php и добавим в него следующее:

<?php
phpinfo();
?>

Проверяем работу site.ru/

Небольшое дополнение
После установки данной связки и переноса работающих проектов, результат был очевиден. Производительность выросла, а нагрузка упала. В моем случае связка NGINX+PHP-FPM справилась на отлично.

P.S. Прошу строго не судить, это моя первая статья и мануал.
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх