目次

php-fpmを設定する方法

php-fpmとは、phpとnginxを仲介するアプリケーションサーバー

ドキュメントルートの設定

デフォルトのドキュメントルートを
/home/user1/public_htmlのようなディレクトリに設定しておく

nginxでユーザーディレクトリの下にpublic_htmlを作成する方法

動作確認用のファイルを作成

vi /home/user1/public_html/info.php

info.phpというファイルを新規作成する

info.php
<?php phpinfo(); ?>

info.phpの中を上記のように設定

ブラウザで表示1

ブラウザで
http://ipアドレス/info.php
へアクセスする

nginxでfastcgi_passなどの設定がされていないとphpinfo()の情報は表示されず、
info.phpというファイルがダウンロードされてしまう

nginxでfastcgi_passを設定する

.phpファイルを実行できるようにnginxを設定する

nginxでfastcgi_passの設定をすると
ブラウザで.phpファイルを開いたときにダウンロードは発生しなくなる

しかし、php-fpm側の設定が不十分だと
File not found.
と表示される

php-fpmのwww.confを設定する

www.confのパス

vi /etc/php-fpm.d/www.conf

/etc/php-fpm.dというディレクトリの
www.confというファイルにphp-fpmの設定が書かれている

php-fpmの実行ユーザーを設定する

デフォルトでは、php-fpmの実行ユーザーはapache:apacheとなっている

これをnginx:nginx(nginxの実行ユーザー)に変更する

nginxの実行ユーザーを確認する方法


cd /etc/php-fpm.d
sed -i -e "s/user = apache/user = nginx/" www.conf
sed -i -e "s/group = apache/group = nginx/" www.conf
sed -i -e "s/;listen.owner = nobody/listen.owner = nginx/" www.conf
sed -i -e "s/;listen.group = nobody/listen.group = nginx/" www.conf

www.conf抜粋(変更前)
user = apache
group = apache
;listen.owner = nobody
;listen.group = nobody
www.conf抜粋(変更後)
user = nginx
group = nginx
listen.owner = nginx
listen.group = nginx

listen.owner = nginx
listen.group = nginxのように設定すると、
php-fpm.sockの所有者がnginx:nginxになる

listen.ownerlisten.groupをコメントアウトすると、
php-fpm.sockの所有者がroot:rootになる

php-fpm.sockについて、詳細は後述

php-fpmをunixソケットで動かす方法

php-fpm
127.0.0.1:9000ではなく、
/var/run/php-fpm/php-fpm.sockで動くように設定する方法

KUSANAGIの設定では
php-fpm.sockを使わずに
127.0.0.1:9000を使用していた

php-fpm.sockを使ったほうが処理が速くなるのかと思っていたけど関係ないのかもしれない

WordPressがよくフリーズしてMySQLがダウンしていた頃
php-fpm.sockのchild processが大量に起動してメモリーを食いつくしスワップが大量に発生していた
メモリー2GBの低スペック環境ではphp-fpm.sockはむしろ害悪かも?

php-fpmのwww.confを設定

cd /etc/php-fpm.d
sed -i -e "s@listen = 127.0.0.1:9000@listen = /var/run/php-fpm/php-fpm.sock@" www.conf

/etc/php-fpm.dディレクトリにある
www.confというファイルで
listen = 127.0.0.1:9000の部分を
listen = /var/run/php-fpm/php-fpm.sockに書き換える

nginxの.confを設定

vi /etc/nginx/conf.d/default.conf

default.confを開く

default.conf抜粋(変更前)
    location ~ \.php$ {
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param  HTTPS on;
        fastcgi_pass   127.0.0.1:9000;
        #fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
    }
default.conf抜粋(変更後)
    location ~ \.php$ {
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param  HTTPS on;
        #fastcgi_pass   127.0.0.1:9000;
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
    }

fastcgi_pass 127.0.0.1:9000;の部分をコメントアウト
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;を有効にする

php-fpmとnginxを再起動

systemctl restart php-fpm
systemctl restart nginx

php-fpm.sockを確認

/etc/php-fpm.d/www.confというファイルで
listen = /var/run/php-fpm/php-fpm.sockを設定することで、

/var/run/php-fpmディレクトリに
php-fpm.sockというファイルが作成される

php-fpm.sockは、php-fpmのサービスが起動中のみ存在するファイル

ブラウザで表示2

ブラウザで
http://ipアドレス/info.php
へアクセスする

PHPのバージョンや
$_SERVER['DOCUMENT_ROOT']の値など、
PHPに関する各種パラメーターが画面に表示される

これが無事に表示されれば、
PHP・PHP-FPM・NGINXの設定に成功している

info.phpを外部に公開することはセキュリティ的に好ましくない
動作確認が取れたら、php.infoは削除する

php-fpmのパフォーマンス調整

php-fpmのパフォーマンス調整