この記事では、Nginx と php-fpm の間の通信メカニズムについて説明し、2 つの通信方法の違いを紹介し、Nginx と php-fpm の組み合わせを構成する方法を確認し、環境で通信方法を選択する方法を分析します。皆さんのお役に立てれば幸いです!
各動的言語 (PHP、Python など) .) コード ファイルがサーバーに認識されるには、対応するパーサーを渡す必要があり、インタプリタとサーバーが相互に通信できるようにするために CGI プロトコルが使用されます。サーバー上の PHP ファイルを解析するには、サーバーが PHP ファイルを解析できるように、PHP インタープリターを対応する CGI プロトコルと組み合わせて使用する必要があります。
CGI のメカニズムでは、リクエストごとに CGI プロセスをフォークし、リクエストが完了した後にプロセスを強制終了する必要があるため、実際のアプリケーションではリソースの無駄になります。そのため、CGI の改良版である FastCGI、処理後、プロセスは強制終了されず、複数のリクエストが処理され続けるため、効率が大幅に向上します。
PHP-FPMはPHP-FastCGI Process Managerであり、FastCGIの実装であり、プロセス管理機能を提供します。プロセスには、マスター プロセスとワーカー プロセスの 2 つのタイプが含まれます。マスター プロセスは 1 つだけあり、ポートをリッスンしてサーバーからリクエストを受信する役割を果たしますが、通常は複数のワーカー プロセスが存在します (特定の数は実際のプロセスに応じて構成されます)。 PHP インタープリターは、コードが実際に実行される場所です。
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 | | 等待处理...
Linux では、nginx と php-fpm 間の通信には 2 つの方法があります: tcp ソケットと unix ソケットです。
tcp ソケットの利点は、サーバーをまたがることができることです。この方法は、nginx と php-fpm が同じマシン上にない場合にのみ使用できます。
Unix ソケットは IPC (プロセス間通信) ソケットとも呼ばれ、同じホスト上でプロセス間通信を実装するために使用されます。この方法では、nginx の php-fpm のソケット ファイルの場所を入力する必要があります。設定ファイル。
2 つの方法のデータ送信プロセスを次の図に示します。
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間の通信が完了します。 アプリケーションでの選択nginx と php-fpm が同じサーバー上で実行されており、同時実行性が高くない (1000 以下) 場合は、nginx との通信効率を向上させるために unix ソケットを選択してください。 php-fpm。
高同時ビジネスに直面している場合は、負荷分散やカーネルの最適化などの運用および保守方法を通じて効率を維持するために、より信頼性の高い tcp ソケットの使用を検討してください。
server { listen 80 default backlog = 1024; }php-fpm.conf ファイル
listen.backlog = 10243) sock ファイルと php-fpm インスタンスを追加しますin/ を作成しますdev/shm に新しい sock ファイルを追加し、nginx の上流モジュールを介して 2 つの sock ファイルへのリクエストを負荷分散し、2 つの sock ファイルを 2 セットの php-fpm インスタンスにマップします。 推奨学習: 「
PHP ビデオ チュートリアル 」
以上がNginx と php-fpm 間の通信メカニズムについて説明し、その構成方法を見てみましょう。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。