ホームページ  >  記事  >  バックエンド開発  >  PHP-FPMのインストールと設定の詳細な説明

PHP-FPMのインストールと設定の詳細な説明

青灯夜游
青灯夜游転載
2021-03-02 18:07:434269ブラウズ

この記事では、PHP-FPM について詳しく説明し、PHP-FPM のインストールとグローバル構成を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

PHP-FPMのインストールと設定の詳細な説明

[推奨学習: 「

PHP ビデオ チュートリアル 」]

##関数 PHP-FPM (PHP FastCGI Process Manager) とは、PHP FastCGI プロセス マネージャー、PHP プロセス プールを管理し、Web サーバーからのリクエストを受け入れるために使用されるソフトウェアを意味します。

PHP-FPM は、メモリとプロセスを効果的に制御し、PHP 設定をスムーズにリロードできる、より優れた PHP プロセス管理方法を提供します。


(1). php-fpm が出現するのはなぜですか?

fpm が出現するのは、すべて php-fastcgi が出現するためです。 php-fastcgi をうまく管理するために実装されたプログラム

#(2). php-fastcgi とは

#php-fastcgi は、php リクエストを解析して返すだけの cgi プログラムです。管理されません (したがって php-fpm)。

(3)なぜphp-cgiとしないのか

実はphp-fastcgiが登場する前からphp-cgiがありましたが、実行効率が低かったためphpに置き換えられました。 -fastcgi 。

(4)fastcgi と cgi の違いは何ですか?

親愛なる皆さん、その違いは非常に大きいです. サービス Web サーバー (nginx) がリクエストを配布するとき、サフィックスを照合することでリクエストが動的 php リクエストであることを認識し、リクエストを php に転送します。

CGI の時代は比較的保守的な考え方で、リクエストが来るたびに php.ini の基本設定情報を読み込み、実行環境を初期化し、プロセスを作成するというものでした。構成、環境の初期化、データの返し、プロセスの終了など、時間が経つにつれて、プロセスを開始する作業は退屈で特に疲れるものになります。

PHP 5 の時代になると、誰もがこの作業方法に特に嫌悪感を抱き、怠惰になりたい人は、CGI に一度に 1 つのメイン プロセス (マスター) を開始させて、読み取り専用にしますか? 構成を一度取得して、複数のワーカー プロセスを開始します。リクエストが来ると、作業の重複を避けるために、リクエストはマスター経由でワーカーに渡されます。そこで、fastcgi が誕生しました。

(5) Fastcgi は非常に優れていますが、開始したワーカーがなくなったらどうすればよいですか?

十分なワーカーがない場合、マスターは構成内の情報を通じて動的にワーカーを開始し、アイドル状態になったワーカーを取り戻すことができます

(6) まだ意味がわかりませんphp-fpm とは?

マスター プロセスと複数のワーカー プロセスを開始するプログラムを管理するためのものです。

PHP-FPM は、HTTP リクエストを 1 つまたは複数のワーカー プロセスに転送するタイミングと方法を制御するメイン プロセスを作成します。処理する子プロセスが増えます。 PHP-FPM メイン プロセスは、

PHP 子プロセスをいつ作成するか (Web アプリケーションからのより多くのトラフィックを処理するため)、いつ破棄するか (子プロセスの実行時間が長すぎるか、不要になった場合) も制御します。 PHP-FPM プロセス プール内の各プロセスは、単一の HTTP リクエストよりも長く存在し、10、50、100、500、またはそれ以上の HTTP リクエストを処理できます。


インストール

PHP 5.3.3 以降、PHP のコア コードに php-fpm が組み込まれました。したがって、php-fpm を個別にダウンロードしてインストールする必要はありません。 php で php-fpm をサポートしたい場合は、php ソース コードをコンパイルするときに --enable-fpm を指定するだけです。

グローバル構成


Centos では、PHP-FPM の主な構成ファイルは /etc/php7/php-fpm.conf です。 指定されたサブプロセスが指定された期間内に失敗すると、PHP-FPM が再起動します:

#在指定的一段时间内,如果失效的PHP-FPM子进程数超过这个值,PHP-FPM主进程将优雅重启。
emergency_restart_threshold = 10

#设定emergency_restart_interval 设置采用的时间跨度。
emergency_restart_interval = 1m

プロセス プールの構成

PHP-FPM 構成ファイルの残りの部分は、「プール定義」と呼ばれる領域です。この領域では、各 PHP-FPM プロセス プールのユーザー設定を構成します。 PHP-FPM プロセス プールは、関連する一連の PHP サブプロセスです。 通常、PHP アプリケーションには独自のプロセス プールがあります。 Centos では、PHP-FPM のメイン構成ファイルの先頭にプロセス プール定義ファイルが導入されています。

include=/etc/php7/php-fpm.d/*.conf

www.conf は、PHP-FPM プロセス プールのデフォルトの構成ファイルです。

user= nobody
#拥有这个 PHP-FPM进程池中子进程的系统用户。要把这个设置的值设用的非根用户的用户名。

group = nobody
#拥有这个 PHP-FPM进程池中子进程的系统用户组。要把这个设置的值设应用的非根用户所属的用户组名。

listen=[::]]:9000
#PHP-FPM进程池监听的IP地址和端口号,让 PHP-FPM只接受 nginx从这里传入的请求。

listen. allowed clients =127.0.0.1
#可以向这个 PHP-FPM进程池发送请求的IP地址(一个或多个)。

pm.max children =51
#这个设置设定任何时间点 PHP-FPM进程池中最多能有多少个进程。这个设置没有绝对正确的值,你应该测试你的PHP应用,确定每个PHP进程需要使用多少内存,然后把这个设置设为设备可用内存能容纳的PHP进程总数。对大多数中小型PHP应用来说,每个PHP进程要使用5~15MB内存(具体用量可能有差异)。 假设我们使用设备为这个PHP-FPM进程池分配了512MB可用内存,那么可以把这个设置设为(512MB总内存)/(每个进程使用10MB) = 51个进程。

...
編集して保存し、PHP-FPM メイン プロセスを再起動します:

sudo systemctl restart php-fpm.service

PHP-FPM プロセス プールの構成の詳細については、http://php.net/manual/ を参照してください。 install.fpm.configuration.php

参考社内開発環境

テスト環境の構成は以下のとおりです。

[www]
user = nobody               #进程的发起用户和用户组,用户user是必须设置,group不是  nobody 任意用户
group = nobody

listen = [::]:9000          #监听ip和端口,[::] 代表任意ip
chdir = /app                #在程序启动时将会改变到指定的位置(这个是相对路径,相对当前路径或chroot后的“/”目录) 

pm = dynamic                #选择进程池管理器如何控制子进程的数量  static:  对于子进程的开启数路给定一个锁定的值(pm.max_children)   dynamic:  子进程的数目为动态的,它的数目基于下面的指令的值(以下为dynamic适用参数)
pm.max_children = 16        #同一时刻能够存货的最大子进程的数量
pm.start_servers = 4        #在启动时启动的子进程数量
pm.min_spare_servers = 2    #处于空闲"idle"状态的最小子进程,如果空闲进程数量小于这个值,那么相应的子进程会被创建
pm.max_spare_servers = 16   #最大空闲子进程数量,空闲子进程数量超过这个值,那么相应的子进程会被杀掉。

catch_workers_output = Yes  #将worker的标准输出和错误输出重定向到主要的错误日志记录中,如果没有设置,根据FastCGI的指定,将会被重定向到/dev/null上
本番環境の構成:

例としてリクエストを PHP-FPM

nginx に転送します:

server {
       listen       83;
       server_name mobile.com;
       root /app/mobile/web/;

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }

        location / {
                index  index.html index.htm index.php;
                # Redirect everything that isn't a real file to index.php
                try_files $uri $uri/ /index.php$is_args$args;
        }

        #把HTTP请求转发给PHP-FPM进程池处理
        location ~ .*\.php                 include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_pass   192.168.33.30:9000;      #监听9000端口
                fastcgi_index  index.php;
                try_files $uri =404;
                #include fastcgi.conf;
        }
        location ~ /\.(ht|svn|git) {
                deny all;
        }
        access_log  /app/wwwlogs/access.log;
        error_log   /app/wwwlogs/error.log;
}
思考

[x] 思考の質問: サーバーの同時実行性を決定する要素は何ですか?

PHP-FPM 最大プロセス数、
    nginx 同時実行数
  • (nginx はプロキシ サーバーとしてのみ機能します)、メモリ使用量、CPU オーバーヘッド
  • サーバー QPS (数値1 秒あたりに処理されるリクエストの数) = 平均リクエスト接続数 * (1/応答時間);

同時実行 = 有効時間 * QPS;

  • 解決策:
  1. マシンの迂回を追加します
    • 同時実行量に基づいてマシンを追加する必要性を計算します
  2. 単一マシンの追加新機能
    • php opcache を有効にしてメモリ領域を増やす
    • キャッシュ システムに接続
    • sql 最適化
    • php 最適化
      ...

プログラミング関連の知識については、プログラミング ビデオをご覧ください。 !

以上がPHP-FPMのインストールと設定の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。