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の中を上記のように設定

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

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

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

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

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

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

/etc/php-fpm.dというディレクトリの
www.confというファイルに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
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はむしろ害悪かも?

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に書き換える

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;を有効にする

systemctl restart php-fpm
systemctl restart nginx

/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のサービスが起動中のみ存在するファイル

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

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

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

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

  • 最終更新: 2023/05/24 11:43