PHP-FPM(FastCGI Process Manager)は、PHPのFastCGI実装に代わるものであり、トラフィックの多いサイトに役立ついくつかの追加機能を備えています。これは、NGINXでPHPページを処理するための推奨される方法であり、 SUPHPなどの従来のCGIベースの方法よりも高速です。 またはmod_php
PHPスクリプトを実行するため。
PHP-FPMを使用する主な利点は、PHPを実行する他の方法と比較して、使用するメモリとCPUがかなり少ないことです。主な理由は、PHPをデモンストレーションし、PHPリクエストを管理するためのCLIスクリプトを提供しながら、バックグラウンドプロセスに変換することです。
PHP-FPNMGINX構成の前提条件
- rootまたはsudo対応ユーザーを使用してUbuntu18.04システムへのSSHセッションを開くことができます。
- Ubuntu18.04システムにNGINXとPHPがすでにインストールされています。
NGINXPHP-FPM構成手順
- PHP-FPMをインストールする
- PHP-FPMプールを構成する
- PHP-FPM用にNGINXを構成する
- NGINXPHP-FPM構成をテストする
1。 PHP-FPMをインストールする
Nginxは、独自のPHPスクリプトを実行する方法を知りません。 PHPスクリプトを効率的に管理するには、PHP-FPMのようなPHPモジュールが必要です。一方、PHP-FPMは、独自のプロセスを作成することにより、NGINX環境の外部で実行されます。したがって、ユーザーがPHPページをリクエストすると、nginxサーバーはFastCGIを使用してそのリクエストをPHP-FPMサービスに渡します。
php-fpmのインストール Ubuntu 18.04では、PHPとそのバージョンに依存します。サーバーにFPMをインストールする前に、インストールされているPHPのドキュメントを確認してください。最新のPHP7.3がすでにインストールされている場合は、次のapt-getコマンドを使用してFPMをインストールできます。
# apt-get install php7.3-fpm
インストールが完了すると、FPMサービスが自動的に開始されます。次のsystemdコマンドを使用して確認できます:
# systemctl status php7.3-fpm
● php7.3-fpm.service - The PHP 7.3 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.3-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2019-02-17 06:29:31 UTC; 30s ago
Docs: man:php-fpm7.3(8)
Main PID: 32210 (php-fpm7.3)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 1152)
CGroup: /system.slice/php7.3-fpm.service
├─32210 php-fpm: master process (/etc/php/7.3/fpm/php-fpm.conf)
├─32235 php-fpm: pool www
└─32236 php-fpm: pool www
2。 PHP-FPMプールを構成する
php-fpmサービスは、デフォルトのプールを作成します。その構成(www.conf)は、/etc/php/7.3/fpm/pool.d
にあります。 フォルダ。要件に応じて、デフォルトのプールをカスタマイズできます。ただし、各FPMプロセスへのリソース割り当てをより適切に制御するために、個別のプールを作成するのが標準的な方法です。
さらに、FPMプールを分離すると、独自のマスタープロセスを作成することで、FPMプールを独立して実行できるようになります。つまり、各phpアプリケーションは、PHP-FPMを使用して独自のキャッシュ設定で構成できます。 1つのプールの構成を変更しても、残りのFPMプールを開始または停止する必要はありません。
別のユーザーを介してPHPアプリケーションを効果的に実行するためのFPMプールを作成しましょう。まず、このプールに対する排他的権限を持つ新しいユーザーを作成します。
# groupadd wordpress_user
# useradd -g wordpress_user wordpress_user
次に、FPM構成ディレクトリに移動し、vi:
などのお気に入りのテキストエディタを使用して構成ファイルを作成します。
# cd /etc/php/7.3/fpm/pool.d
# vi wordpress_pool.conf
[wordpress_site]
user = wordpress_user
group = wordpress_user
listen = /var/run/php7.2-fpm-wordpress-site.sock
listen.owner = www-data
listen.group = www-data
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = off
; Choose how the process manager will control the number of child processes.
pm = dynamic
pm.max_children = 75
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.process_idle_timeout = 10s
上記のFPM構成オプションとその値を以下に説明します。
- [wordpress_site] :プールの名前であり、すべてのプール名で一意である必要があります。
- ユーザーとグループ :プールが実行されるユーザーとグループ。
- 聞く :このプールのソケットファイルの名前。
- listen.ownerおよびlisten.group :NGINXを実行しているユーザーとグループに一致する必要があります。私たちの場合はwww-dataです。
- php_admin_value :カスタムphp構成値を設定できます。
- php_admin_flag :PHPブールフラグを設定できます。
- 午後 :プロセスマネージャの設定と値が動的であるということは、子プロセスの数が次のディレクティブに基づいて動的に設定されることを意味します。
- pm.max_children :同時に生きることができる子供の最大数。
- pm.start_servers :起動時に作成された子の数。
- pm.min_spare_servers :「アイドル」状態(処理を待機中)の子の最小数。アイドル状態のプロセスの数がこの数より少ない場合、一部の子が作成されます。
- pm.max_spare_servers :アイドル状態(処理を待機中)の子の最大数。アイドル状態のプロセスの数がこの数よりも多い場合、一部の子が殺されます。
- pm.process_idle_timeout :アイドル状態のサーバープロセスの必要な最大数。 pm値が動的に設定されている場合にのみ使用されます。
上記の設定とは別に、env['PHP_FOO'] = $bar
のようなものを使用して、いくつかのシステム環境変数をphp-fpmサービスに渡すこともできます。 。
たとえば、上記の構成ファイルに次のオプションを追加すると、ホスト名と一時フォルダーの場所がPHP環境に設定されます。
...
...
env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
...
...
また、上記のプール構成ファイルのプロセスマネージャー設定は動的に設定されています。要件に最適な設定を選択してください。
プロセスマネージャの他の構成オプションは次のとおりです。
上記の構成ファイルの作成が完了したら、fpmサービスを再起動して新しい設定を適用します。
# systemctl start php7.3-fpm
FPMプールは、phpページを提供するためにすぐに作成されます。上記のFPM構成ファイルを指定することで、別のsystemdサービスを作成できることを忘れないでください。これにより、他のプールに影響を与えることなく、このプールを開始/停止できます。
3。 PHP-FPM用にNGINXを構成する
次に、上記のFPMプールを利用するNGINXサーバーブロックを作成します。これを行うには、NGINX構成ファイルを編集し、オプションfastcgi_pass
を使用してプールのソケットファイルのパスを渡します。 phpのロケーションブロック内。
server {
listen 80;
server_name example.journaldev.com;
root /var/www/html/wordpress;
access_log /var/log/nginx/example.journaldev.com-access.log;
error_log /var/log/nginx/example.journaldev.com-error.log error;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php7.2-fpm-wordpress-site.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
}
NGINXサーバーブロック
上記の構成設定が構文的に正しいことを確認し、NGINXを再起動します。
# nginx-t
# systemctl restart nginx
4。 PHP-FPNMGINX構成をテストする
上記のNGINX構成ファイルが実際に新しく作成されたFPMプールを使用しているかどうかをテストするには、Webルート内にphp情報ファイルを作成します。 /var/www/html/wordpress
を使用しました 上記のNGINX構成ファイルのWebルートとして。環境に応じてこの値を調整してください。
# cd /var/www/html/wordpress
# echo "<?php echo phpinfo();?>" > info.php
PHP情報ページの作成が完了したら、お気に入りのWebブラウザーでそのページを指定します。
$_SERVER['USER']
の値に気付くでしょう および$_SERVER['HOME']
変数はwordpress_user
を指しています および/home/wordpress_user
それぞれ、以前にFPM構成ファイルで設定したことにより、NGINXが目的のFPMプールを使用してphpページを提供していることを確認します。
NGINXPHP-FPMテスト
概要
この記事では、php-fpmをインストールし、ユーザーやアプリケーションごとに別々のプールを構成する方法を学びました。また、PHP-FPMサービスに接続するようにNGINXサーバーブロックを構成する方法も学びました。 PHP-FPMは、信頼性、セキュリティ、スケーラビリティ、および速度に加えて、多くのパフォーマンス調整オプションを提供します。デフォルトのPHP-FPMプールを複数のリソースプールに分割して、さまざまなアプリケーションにサービスを提供できるようになりました。これにより、サーバーのセキュリティが強化されるだけでなく、サーバーリソースを最適に割り当てることができます。