developers blog

nginx と php-fpm の通信を Unix ドメインソケット (Unix Domain Sockets) で行なう

はじめに

nginx と php-fpm の通信を、TCP Sokets から Unix domain Sockets へ変更します。

環境

  • VPS : さくらVPS 1G SSD
  • OS : CentOS 7.3
  • その他 : nginx/1.10.2, PHP 7.1.0 (fpm-fcgi)

Unix ドメインソケット (Unix Domain Sockets)

Unix ドメインソケットは、同一のホスト上でしか動作しませんが、TCP ソケットよりもパフォーマンスに優れています。その為、nginx と php-fpm の通信を Unix ドメインソケットに変更することで、処理速度が速くなることが期待できます。

php-fpm の設定

php-fpm の設定ファイルを開き、FastCGI のリクエストを受ける方法を TCP ソケットから Unix ドメインソケットへ変更します。

1# vi /etc/php-fpm.d/wwww.conf
/etc/php-fpm.d/wwww.conf
1- listen = 127.0.0.1:9000
2+ #listen = 127.0.0.1:9000
3+ listen = /var/run/php-fpm/php-fpm.sock

保存し、php-fpm を再起動すると、指定のフォルダに php-fpm.sock が作成されます。

nginxの設定

nginx の設定ファイルを開き、fastcgi_pass を TCP ソケットから Unix ドメインソケットへ変更します。

1# vi /etc/nginx/nginx.conf
/etc/nginx/nginx.conf
1- fastcgi_pass  127.0.0.1:9000;
2+ #fastcgi_pass  127.0.0.1:9000;
3+ fastcgi_pass  unix:/var/run/php-fpm/php-fpm.sock;

nginx と php-fpm を再起動します。

1# systemctl restart php-fpm
2# systemctl restart nginx

ブラウザからアクセスして、php ファイルが正常に表示されれば成功です。

画面が表示されない場合

nginx のエラーログを確認します。

1# cat /var/log/nginx/error.log

以下のようなメッセージが表示されている場合は、php-fpm.sock ファイルへの権限がありません。

1.... *1 connect() to unix:/var/run/php-fpm/php-fpm.sock failed (13: Permission denied) while connecting to upstream, ....

php-fpm の設定を変更する

php-fpm の設定を変更し、所有者/グループを nginx 、パーミンションを 660 へ変更します。

1# vi /etc/php-fpm.d/wwww.conf
/etc/php-fpm.d/wwww.conf
1- ;listen.owner = nobody
2- ;listen.group = nobody
3- ;listen.mode = 0660
4+ listen.owner = nginx
5+ listen.group = nginx
6+ listen.mode = 0660

php-fpm を再起動し確認します。

1# systemctl restart php-fpm