GNU/Linux >> Linux の 問題 >  >> Linux

NGINXでPHP-FPMを構成する方法

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
    ...
    ...
    

    また、上記のプール構成ファイルのプロセスマネージャー設定は動的に設定されています。要件に最適な設定を選択してください。

    プロセスマネージャの他の構成オプションは次のとおりです。

  • 静的 :一定数のPHPプロセスが維持されます。
  • オンデマンド :起動時に子は作成されません。サーバーで新しいリクエストを受信すると、子はフォークされます。

上記の構成ファイルの作成が完了したら、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プールを複数のリソースプールに分割して、さまざまなアプリケーションにサービスを提供できるようになりました。これにより、サーバーのセキュリティが強化されるだけでなく、サーバーリソースを最適に割り当てることができます。


Linux
  1. PHP-FPMを介してPHPで動作するようにNginxを構成する方法

  2. PleskでPHP-FPMを使用してNginxを有効にする方法

  3. PHP-FPM を使用して PHP を実行するように Nginx を構成する方法

  1. NginxでオリジンCloudflareSSLを設定する方法

  2. rsyslogを使用してリモートログサーバーを構成するにはどうすればよいですか?

  3. Ubuntu20.04にNginxを使用してPHP7.4をインストールする方法

  1. CentOS7にNginxを使用してWordPressをインストールする方法

  2. UbuntuでNginxを使用して複数のPHPバージョンを実行する方法は?

  3. Ubuntu 20.04 で Apache を使用して PHP-FPM をインストールする方法