Nginx unix socket

В Nginx unix socket — способ подключения к бэкенду в виде PHP-FPM, позволяющий избежать сетевых запросов и дающий значительный прирос в скорости работы.

 

Nginx является самым быстрым веб-сервером, но он не может обрабатывать скрипты. Для этого нужен бэкенд в виде Apache или PHP-FPM. Для Ruby/Python применяются другие бэкенды.

 

 

Nginx unix socket, ускорение Nginx в связки с PHP-FPM

Использование Unix сокета вместо TCP сокета позволяет работать быстрее за счет отсутствия сетевых запросов (обращений к 127.0.0.1).

 

Рассмотрим установку на Debian 9. Для дистрибутива FPM сразу запускается на unix socket-е. Все, что нужно для более ранних версий Debian, Centos или Ubuntu — привести состояние конфигурационных файлов к такому.

 

Устанавливаем пакеты на новый облачный сервер

apt-get install php-fpm

apt-get install nginx

 

Настройка Nginx

Создаем файл виртуального хоста

cd /etc/nginx/sites-available && mcedit fpm

server {
listen 80;
server_name fpm.com;

root /var/www/fpm.com;
index index.php index.html;

location / {
try_files $uri $uri/ =404;
}

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
# fastcgi_pass 127.0.0.1:9000;
}

}

 

В последней секции задано, что при обработке всех файлов с расширением .php запросу нужно направлять на unix сокет unix:/var/run/php/php7.0-fpm.sock. В случае с TCP эта строк комментируется, с fastcgi_pass 127.0.0.1:9000; знак комментария снимается.

 

 

fpm.com нужно добавить в файл hosts на компьютере.

 

Далее тестовый скрипт

mcedit /var/www/fpm.com/index.php

<?php
echo «Works»;
?>

 

Активируем виртуальный хост

ln -s /etc/nginx/sites-available/fpm /etc/nginx/sites-enabled/

 

Перечитываем конфигурацию

nginx -s reload

 

 

 

Настройка FPM

PHP-FPM запущен, но в netstat -nltp его не увидеть, потому, что TCP-сокет не используется

ss -l | grep fpm

u_str LISTEN 0 128 /run/php/php7.0-fpm.sock 17149 * 0

 

В файле /etc/php/7.0/fpm/pool.d/www.conf директивой listen для FPM задается как запускать службу. Unix сокет или комбинация порта и IP адреса.

 

Значение всегда можно поменять, что и требуется сделать когда нужен переход с TCP на Unix-сокет. Дополнительно к внесению изменений в Nginx.

 

mcedit /etc/php/7.0/fpm/pool.d/www.conf

listen = /run/php/php7.0-fpm.sock
listen.owner = www-data
listen.group = www-data

 

nginx unix socket
Обратившись в браузере к URL, который выбран для тестирования, можно увидеть, что PHP скрипт выполняется.

 

Это говорит об успешном перенаправлении запросов на /run/php/php7.0-fpm.sock и о том, что конфигурация с Nginx unix socket работает.

 

Если обращений к серверу много, улучшить производительность позволит тонкая настройка Nginx.