Настройка связки 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
Теперь зайдем на сайт и убедимся, что всё работает
Теперь видим, что php работает в режиме FPM/FastCGI
Теперь сменим обработчик php. Именно для этого создавалась виртуальная ссылка. Для этого выполним команду
rm /var/run/php.sock && ln -s /var/run/php/php7.0-fpm.sock /var/run/php.sock
Данная команда удаляет старый виртуальный сокет и создает новый, ссылающийся уже на обработчик php7
Проверим
Может быть интересно: