この記事では、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 つの方法のデータ送信プロセスを次の図に示します。
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 连接方式 } }
listen = 127.0.0.1:9000 # 或者下面这样 listen = /var/run/php-fpm.sock
以上がPHP-FPM と Nginx 間の通信メカニズムの概要 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。