В 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
Обратившись в браузере к URL, который выбран для тестирования, можно увидеть, что PHP скрипт выполняется.
Это говорит об успешном перенаправлении запросов на /run/php/php7.0-fpm.sock и о том, что конфигурация с Nginx unix socket работает.
Если обращений к серверу много, улучшить производительность позволит тонкая настройка Nginx.