NGINX+PHP-FPM

Связ­ка nginx + php-fpm дает боль­шую про­из­во­ди­тель­ность, неже­ли apache с php

Thank you for reading this post, don't forget to subscribe!

Под­клю­чим репозитории:
nginx

Про­из­во­дим установку:

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 с таким содержимым:

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