Настройка связки nginx + php-fpm

Настройку nginx как frontend к Apache2 мы уже рассматривали, теперь давайте рассмотрим вариант с работой nginx и php-fpm. Будем продолжать установку уже с учетом того, что у нас уже есть базовая конфигурация сервера.

На данный момент на сервере установлена связка nginx + apache2 + php5/php7 + mysql
Проведем настройку, исключающую apache2 из данной связки, заменив его на php-fpm

Установим php-fpm версий 5 и 7

apt-get install php5-fpm php7.0-fpm

отредактируем файл /etc/php5/fpm/php.ini
необходимо найти строчку содержащую «cgi.fix_pathinfo», которая по-умолчанию выглядит так (закомментирована)

;cgi.fix_pathinfo = 1

и привести её к виду

cgi.fix_pathinfo = 0

Если планируется загрузка больших файлов то можно увеличить максимальный объем загружаемых данных, например, до 200 МБ

post_max_size = 200M upload_max_filesize = 200M

Затем сохранить изменения в файле.
Далее, необходимо отрыть для редактирования файл «/etc/php5/fpm/pool.d/www.conf»
найти строчку с параметров «security.limit_extensions» и привести её к виду

security.limit_extensions = .php .php3 .php4 .php5

Эта настройка ограничит выполнение файлов по расширению имени. В этом же файле найти строчку с параметром «listen» и удостовериться, что она имеет примерно такой формат

listen = /var/run/php5-fpm.sock

Это определит файл для связи «Nginx» с «PHP-FPM» (сокет). В целях безопасности запрещаем какойпопало программе писать в сокет путём указания прав доступа к сокету. Находим строчки с описанием параметров «listen.owner», «listen.group» и «listen.mode» (по-умолчанию они закомментированы) и приводим их к виду
listen.owner = www-data listen.group = www-data

Следует сохранить изменения в файле и перезапустить «PHP-FPM», например, командой Такие же изменения необходимо провести для php7:
Отредактировать файл /etc/php/7.0/fpm/php.ini
Отредактировать файл /etc/php/7.0/fpm/pool.d/www.conf

Далее редактируем файл виртуального хоста nginx /etc/nginx/sites-available/testsite.com и приводим его к следующему виду:

server {
 listen 80; index index.php;
 server_name testsite.com www.testsite.com; root /var/www/testsite.com;

access_log /var/log/nginx/testsite.com-acces.log; error_log /var/log/nginx/testsite.com-error.log;

location / {
 try_files $uri $uri/ /index.php?$args;
 }

location ~* \.php$ { try_files $uri = 404; include fastcgi_params;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/var/run/php.sock;
 }

location ~ /\.ht { deny all;
 }

location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|html|txt)$ { root /var/www/testsite.com;
 }
 }

Секция location ~* \.php$ {} описывает правила проксирования файлов php.
Переменная fastcgi_pass в данной секции указывает путь к сокету, на который необходим проксировать обработку php файлов.
При данной конфигурации nginx ссылается на несуществующий сокет. Это необходимо для возможности смены обработчика php «на лету»:
Создадим символическую ссылку существующего сокета на виртуальный:

ln –s /var/run/php5-fpm.sock /var/run/php.sock

Теперь сокет /var/run/php.sock ссылается на сокет /var/run/php5-fpm.sock Перезапустим все сервисы:

Service php5-fpm restart && service php7.0-fpm restart && service nginx restart

Так же остановим apache2 – он теперь не нужен.

Service apache2 stop

Теперь зайдем на сайт и убедимся, что всё работает

Смотрите так же   Переводим сайты WordPress на LEMP (Linux + Nginx + MySQL + php-fpm)

nginx_php-fpm_phpinfo

Теперь видим, что php работает в режиме FPM/FastCGI

Теперь сменим обработчик php. Именно для этого создавалась виртуальная ссылка. Для этого выполним команду

rm /var/run/php.sock && ln -s /var/run/php/php7.0-fpm.sock /var/run/php.sock

Данная команда удаляет старый виртуальный сокет и создает новый, ссылающийся уже на обработчик php7

Проверим

nginx_phpfpm_check

Может быть интересно:

Добавьте комментарий