🐷
nginx->php-fpmにUnixドメインソケット通信しているサーバーの設定を確認
はじめに
Unixドメインソケット通信とソケット通信の比較は、他の方の記事など参考にして下さい。
Unixドメインソケット通信では基本的に同一ホスト環境上で、sockファイルを仲介してプロセス間通信をします。
(自分が作った環境ではないですが)nginx -> php-fpmにUnixドメインソケット通信している環境があったので、どんな設定になっているのかを確認していきます。
下記のような通信が行われています。
[クライアントブラウザ]
↓
[nginx]
↓ FastCGI over Unix socket
[/run/php-fpm/www.sock]
↓ accept()
[php-fpm worker (user=nginx)]
service稼働を確認
nginx・php-fpmそれぞれのdeamon processがactive状態であることが分かります。
sh-4.2$ systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Drop-In: /usr/lib/systemd/system/nginx.service.d
└─php-fpm.conf
Active: active (running) since Sun 2025-06-15 01:25:55 UTC; 3h 48min ago
Process: 5583 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Process: 5580 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Process: 5578 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
Main PID: 5585 (nginx)
CGroup: /system.slice/nginx.service
├─5585 nginx: master process /usr/sbin/nginx
├─5586 nginx: worker process
└─5587 nginx: worker process
sh-4.2$ systemctl status php-fpm
● php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2024-05-31 13:31:20 UTC; 1 years 0 months ago
Main PID: 14603 (php-fpm)
Status: "Processes active: 0, idle: 35, Requests: 567750, slow: 0, Traffic: 0req/sec"
CGroup: /system.slice/php-fpm.service
├─13872 php-fpm: pool www
├─14603 php-fpm: master process (/etc/php-fpm.conf)
├─16279 php-fpm: pool www
├─16284 php-fpm: pool www
├─16285 php-fpm: pool www
├─16292 php-fpm: pool www
├─16293 php-fpm: pool www
├─16294 php-fpm: pool www
nginxのlisten状態を確認
nginxは 80port,443portでサーバー内でlistenした状態になっています。
sh-4.2$ sudo ss -ltnp | grep nginx
LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=5587,fd=6),("nginx",pid=5586,fd=6),("nginx",pid=5585,fd=6))
LISTEN 0 128 0.0.0.0:443 0.0.0.0:* users:(("nginx",pid=5587,fd=7),("nginx",pid=5586,fd=7),("nginx",pid=5585,fd=7))
/etc/nginx/nginx.conf
server設定が下記のようになっています。
server {
listen 80;
// 省略
}
server {
listen 443 ssl;
// 省略
}
nginx -> php-fpmへの設定状態を確認
nginxの設定
/etc/nginx/nginx.conf
を確認していきます。
fastcgi_pass = fastcgiへリクエストする際のリクエスト先が下記のように指定されています。
server {
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
}
}
php-fpmの設定
php-fpmは/run/php-fpm/www.sockをlistenしていることが分かります。
less /etc/php-fpm.d/www.conf | grep ^listen
listen = /run/php-fpm/www.sock
listen.acl_users = apache,nginx
listen.allowed_clients = 127.0.0.1
php-fpmのlisten状態を確認
TCPソケットを対象にしたlistenはありません。
sudo ss -ltnp | grep php-fpm
Unixドメインソケットで、/run/php-fpm/www.sock
を対象にしたlisten状態になっていました。
workerプロセスが/run/php-fpm/www.sock
に対してlistenしています。
sudo ss -lxp | grep php-fpm
sh-4.2$ sudo ss -lxp | grep php-fpm
u_str LISTEN 0 128 /run/php-fpm/www.sock 618029115 * 0
users:(("php-fpm",pid=25164,fd=10),("php-fpm",pid=25163,fd=10),("php-fpm",pid=25162,fd=10),("php-fpm",pid=25161,fd=10),("php-fpm",pid=25160,fd=10),("php-fpm",pid=25153,fd=10),XXXX
結論
- server内で80,443portでlisten
- nginx->php-fpmはUnixドメインソケットを介して通信
- php-fpmのworker processはUnixドメインソケットをlisten
[クライアントブラウザ]
↓ 1
[nginx]
↓ 2
[/run/php-fpm/www.sock]
↓ 3
[php-fpm worker (user=nginx)]
Discussion