php-fpmを設定する方法
php-fpmとは、phpとnginxを仲介するアプリケーションサーバー
ドキュメントルートの設定
デフォルトのドキュメントルートを
/home/user1/public_html
のようなディレクトリに設定しておく
動作確認用のファイルを作成
vi /home/user1/public_html/info.php
info.php
というファイルを新規作成する
info.php
の中を上記のように設定
ブラウザで表示1
ブラウザで
http://ipアドレス/info.php
へアクセスする
nginxでfastcgi_pass
などの設定がされていないとphpinfo()
の情報は表示されず、
info.php
というファイルがダウンロードされてしまう
nginxでfastcgi_passを設定する
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の実行ユーザー)に変更する
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.owner
とlisten.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
は削除する