1. PHPとPHP-FPMの違い
PHPとはWebサイトやWebAppに用いられるサーバサイドスクリプト言語です。
PHPはCLIスクリプトとして動作させることもできますが、一般的にはWebサーバとセットでセットアップしWebサイトを動的に生成させます。
PHPには各サーバソフト独自のモジュールインタフェース(SAPI)を用いてPHPとWebサーバソフトがやりとりするものとCGI/FastCGI経由で動作させるWebサーバがあります。
Webサーバタイプ | Webサーバ例 | PHPの利用方法 |
---|---|---|
PHPをモジュール化したWebサーバ | Apache, IIS | PHPをモジュールとしてロード |
PHPを組み込まないWebサーバ | nginx, H2O | CGI, FastCGI |
2. PHPのインストール
PHP, php-fpmどちらをを利用する場合もPHPをインストールします。
2-1. リポジトリ追加
Linuxディストリビューション初期から組み込まれているPHPの場合、バージョンが古い事が大いにあります。
リポジトリを追加し最新のPHP環境を利用しましょう。PHPは5.X系から7.X系への移行に伴いスループット改善に力を入れる事を表明しており、今後は最新版を利用した方が機能面だけでなく、システムリソース面でも優位となる可能性があります。
最新版のPHPバージョンの確認
REMI repositoryサイトから利用OSにあったリポジトリURLを確認する。
CentOS7の場合は以下。
https://rpms.famillecollet.com/enterprise/remi-release-7.rpm
repositoryの追加
$ sudo yum -y install https://rpms.famillecollet.com/enterprise/remi-release-7.rpm
2-2. PHPインストール
PHP-FPMを利用する場合でも通常のPHPと同様にPHPをインストールします。
REMIリポジトリの利用(PHP7.3系を利用)し、PHPとPHPモジュールをインストールします。
$ sudo yum -y update --enablerepo=remi,remi-php73 php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql
3. php-fpmの設定(nginx)
コンフィグサンプル
3-1. httpディレクティブへの設定内容
キャッシュの設定は”/etc/nginx/nginx.conf”のhttpディレクティブへ設定します。
fastcgi_cache_path /var/cache/nginx/wpcache levels=1:2 keys_zone=wpcache:30m max_size=512M inactive=600m;
3-2. Serverディレクティブへの設定内容
fastcgiの設定はサイト毎に”/etc/nginx/conf.d/[filename].conf”のServerディレクティブへ設定します。
* HTTP/HTTPS含め2サイト以上設定している場合は、全てのファイルにfastcgiを設定する必要があります。
fastcgiを適用するファイルをphpとする
location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; if (!-f $document_root$fastcgi_script_name) { return 404; }
fastcgiサーバのアドレスを指定
fastcgi_pass 127.0.0.1:9000;
URIが”/”で終わっている場合に付与するパスを指定
fastcgi_index index.php;
fastcgiに渡すパラメータ
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi include設定
include fastcgi_params;
cacheしないページ条件を指定
if ($request_method = POST) { set $do_not_cache 1; } if ($query_string != "") { set $do_not_cache 1; } if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") { set $do_not_cache 1; } if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { set $do_not_cache 1; }
fastcgi_cache zoneを指定
fastcgi_cache wpcache;
キャッシュへのkeyの指定
fastcgi_cache_key "$request_method:$scheme://$host$request_uri";
キャッシュ有効期限を設定
fastcgi_cache_valid 200 60m;
キャッシュしない条件を指定
fastcgi_no_cache $do_not_cache; fastcgi_cache_bypass $do_not_cache;
ヘッダにキャッシュ情報を付与する
add_header X-F-Cache $upstream_cache_status;
ピンバック: PHP [Introduction] – Site-Builder.wiki