Связка nginx + php-fpm дает большую производительность, нежели apache с php
Подключим репозитории:
nginx
1 |
<strong>nano /etc/yum.repos.d/nginx.repo</strong> |
1 2 3 4 5 6 7 |
[nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=0 enabled=1 <strong>Epel, Remi</strong> |
1 2 3 4 |
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm <strong>Включаем Remi</strong> |
1 |
nano /etc/yum.repos.d/remi.repo |
1 2 3 |
enabled=1 |
Производим установку:
1 |
<strong>yum install nginx mysql mysql-server php php-fpm php-gd php-mysql php-mbstring php-xml php-mcrypt php-mysql php-gd php-imap php-ldap php-mbstring php-odbc php-pear php-xml php-xmlrpc</strong> |
1 |
<strong>chkconfig mysqld on && chkconfig nginx on && chkconfig php-fpm on</strong> |
1 |
<strong>service mysqld start</strong> |
1 2 3 4 5 |
<strong>/usr/bin/mysql_secure_installation</strong> Создадим директории для нашего будущего хоста и для логов <strong>php-fpm</strong>, назначим необходимые права на них и создадим в корневой директории нашего хоста файл i.php, который будет нам отдавать результат выполнения phpinfo, так же добавим пользователя под которым будет работать сайт. |
adduser user1
mkdir -p /var/www/user1/site/newsite.com
chown -R user1:user1 user1/
touch /var/log/nginx/newsite.com-access.log
touch /var/log/nginx/newsite.com-error.log
Создаём файл настроек виртуалхоста /etc/nginx/conf.d/newsite.com.conf
с таким содержимым:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
server { server_name newsite.com; access_log /var/log/nginx/newsite.com-access.log; error_log /var/log/nginx/newsite.com-error.log; root /var/www/user1/site/newsite.com; 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 /var/www/user1/site/newsite.com$fastcgi_script_name; } } Далее проверяем синтаксис <strong>nginx -t</strong> и перезапускаем nginx Для проверки создаем phpinfo |
echo "<?php echo phpinfo(); ?>" > /var/www/user1/site/newsite.com/i.php
Поправим пользователя от которого будет запускаться php-fpm с apache на nginx:
nano /etc/php-fpm.d/www.conf
user = nginx
group = nginx
Далее перезапускаем:
/etc/init.d/php-fpm restart
Можно проверять работу.
Виртуалхост под отдельным пользователем с PHP-FPM
PHP-FPM создаёт и управляет отдельными “пулами” (pool
) процессов, которые также называют”воркерами” (workers
), и именно они получают и обрабатывают файлы PHP из директории сайта.
Для PHP-FPM можно настроить отдельный пул для каждого отдельного сайта, процессы которого будут запускаться и работать под определённым пользователем. Этакий аналог suEXEC для Apache HTTP
Когда уже установлен nginx + php-fpm
cat /etc/nginx/conf.d/newsite.com.conf
server {
server_name newsite.com 192.168.1.181;
access_log /var/log/nginx/newsite.com-access.log;
error_log /var/log/nginx/newsite.com-error.log;
root /var/www/user1/site/newsite.com;
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 /var/www/user1/site/newsite.com$fastcgi_script_name;
}
}
нам необходимо настроить для PHP-FPM новый пул.
Настройки пулов в CentOS хранятся в директории /etc/php-fpm.d/
(для Debian/Ubuntu – /etc/php5/fpm/pool.d/
), и там уже есть файл настроек по-умолчанию – www.conf
.
Настройки самого PHP-FPM хранятся в файле /etc/php-fpm.conf
.
Копируем его с новый именем (для удобства – по имени хоста):
cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/newsite2.com.conf
Открываем и находим:
; Start a new pool named 'www'.
[www]
имя пула (для каждого должно быть уникальным);
; Note: This value is mandatory.
listen = 127.0.0.1:9000
пока не меняем, но обращаем на него внимание – на этот адрес будут перенаправляться запросы к php-файлам;
; RPM: apache Choosed to be able to access some dir as httpd
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apache
пользователь и группа, от имени которого будут выполняться файлы;
listen – тут можно использовать либо порт(по отдельному порту на каждый пул, 9000 занят пулом www), либо – unix-сокет, мы используем порт;
user и group – устанавливаем владельца файлов php;
Получаем такой конфиг:
[newsite2.com]
listen = 127.0.0.1:9001
user = user2
group = user2
Это минимальные изменения, позже мы ещё вернёмся к этому файлу.
Сохраняем, выходим, перезапускаем PHP-FPM:
service php-fpm restart
Проверяем порт:
# netstat -anpt | grep 9001
tcp 0 0 127.0.0.1:9001 0.0.0.0:* LISTEN 26127/php-fpm
Возвращаемся к настройке NGINX – в данном случае файл /etc/nginx/conf.d/newsite2.com.conf
Меняем строку:
fastcgi_pass 127.0.0.1:9000;
на:
fastcgi_pass 127.0.0.1:9001;
(порт, который мы указали в настройках пула PHP-FPM).
Проверяем конфигурацию:
nginx -t
Перезапускаем NGINX:
service nginx restart
Смотрим пользователя, под которым запущен пул:
ps aux | grep user2