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.conf1- 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.conf1- 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.conf1- ;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