PHP-FPM と Nginx 間の通信メカニズムの概要 (例付き)

不言
リリース: 2023-04-04 21:48:01
転載
2654 人が閲覧しました

この記事では、PHP-FPM と Nginx の間の通信メカニズムについて (例とともに) 紹介します。一定の参考価値があります。必要な友人は参考にしてください。お役に立てれば幸いです。

PHP-FPM の概要

  • CGI プロトコルと FastCGI プロトコル

各動的言語 ( PHP 、Python など)コード ファイルがサーバーに認識されるには、対応するパーサーを渡す必要があり、インタプリタとサーバーが相互に通信できるようにするために CGI プロトコルが使用されます。サーバー上の PHP ファイルを解析するには、サーバーが PHP ファイルを解析できるように、PHP インタープリターを対応する CGI プロトコルと組み合わせて使用​​する必要があります。

CGI のメカニズムでは、リクエストごとに CGI プロセスをフォークし、リクエストが完了した後にプロセスを強制終了する必要があるため、実際のアプリケーションではリソースの無駄になります。そのため、CGI の改良版である FastCGI、処理後、プロセスは強制終了されず、複数のリクエストが処理され続けるため、効率が大幅に向上します。

  • PHP-FPM とは

PHP-FPM は、FastCGI の実装であり、プロセス管理を提供する PHP-FastCGI Process Manager です。関数。プロセスには、マスター プロセスとワーカー プロセスの 2 つのタイプが含まれます。マスター プロセスは 1 つだけあり、ポートをリッスンしてサーバーからリクエストを受信する役割を果たしますが、通常は複数のワーカー プロセスが存在します (特定の数は実際のプロセスに応じて構成されます)。 PHP インタープリターは、コードが実際に実行される場所です。

Nginx と php-fpm の通信メカニズム

Web サイト (www.test.com など) にアクセスすると、処理フローは次のとおりです。

  www.test.com
        |
        |
      Nginx
        |
        |
路由到www.test.com/index.php
        |
        |
加载nginx的fast-cgi模块
        |
        |
fast-cgi监听127.0.0.1:9000地址
        |
        |
www.test.com/index.php请求到达127.0.0.1:9000
        |
        |
     等待处理...
ログイン後にコピー
  • Nginx と php-fpm の組み合わせ

Linux では、Nginx は tcp および unix ソケットを介して php-fpm と通信します。

tcp の利点は、サーバーをまたがることができることです。この方法は、Nginx と PHP-fpm が同じマシン上にない場合にのみ使用できます。

Unix ソケットは IPC (プロセス間通信) ソケットとも呼ばれ、同じホスト上でプロセス間通信を実装するために使用されます。この方法では、nginx の php-fpm のソケット ファイルの場所を入力する必要があります。設定ファイル。

2 つの方法のデータ送信プロセスを次の図に示します。

PHP-FPM と Nginx 間の通信メカニズムの概要 (例付き)

#2 つの違い:

Unix ソケットによるもの ネットワーク プロトコル スタック、パッケージ化とアンパック、チェックサムの計算、シーケンス番号と応答の維持などを行う必要はありません。アプリケーション層のデータをあるプロセスから別のプロセスにコピーするだけです。したがって、tcp よりも効率が高く、不要な tcp オーバーヘッドを削減できます。ただし、同時実行性が高いと Unix ソケットは不安定になります。接続数が爆発的に増えると、大量の長期キャッシュが生成されます。接続指向プロトコルのサポートがないと、大きなデータ パケットがエラーを返さずに直接失敗する可能性があります。例外。 tcp などの接続指向のプロトコルを使用すると、通信の正確さと整合性をより確実に確保できます。

Nginx と php-fpm の組み合わせには、それぞれの設定ファイルでの設定のみが必要です:

1) Nginx での設定

tcp 通信を例に挙げます

server {
    listen       80; #监听80端口,接收http请求
    server_name  www.test.com; #就是网站地址
    root /usr/local/etc/nginx/www/huxintong_admin; # 准备存放代码工程的路径
    #路由到网站根目录www.test.com时候的处理
    location / {
        index index.php; #跳转到www.test.com/index.php
        autoindex on;
    }   

    #当请求网站下php文件的时候,反向代理到php-fpm
    location ~ \.php$ {
        include /usr/local/etc/nginx/fastcgi.conf; #加载nginx的fastcgi模块
        fastcgi_intercept_errors on;
        fastcgi_pass   127.0.0.1:9000; # tcp 方式,PHP-fpm 监听的IP地址和端口
       # fasrcgi_pass /usr/run/php-fpm.sock # unix socket 连接方式
    }

}
ログイン後にコピー
2) php-fpmの設定

listen = 127.0.0.1:9000
# 或者下面这样
listen = /var/run/php-fpm.sock
ログイン後にコピー
Unixソケットを使用して接続する場合、ソケットファイルは本質的にファイルであるため、権限制御の問題があるため、Nginxのプロセス php-fpm には権限の問題があります。そうでない場合は、アクセス権限がないことを示すメッセージが表示されます。 (各設定ファイルにユーザーを設定)
上記の設定でphp-fpmとNginx間の通信が完了します。

以上がPHP-FPM と Nginx 間の通信メカニズムの概要 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート