ホームページ >バックエンド開発 >PHPチュートリアル >PHP と nginx 間の動作メカニズムと原理
Nginx (「エンジン x」) は、高パフォーマンス HTTP およびリバース プロキシ サーバー、IMAP/POP3/SMTP サーバーでもあります。
初期のWebサーバーはHTMLなどを処理するだけでした. 静的なファイルですが、テクノロジーの発展に伴いphpなどの動的言語も登場しています。
Web サーバーが処理できません。どうすればよいですか?次に、PHP インタープリターに処理させます。
PHP インタープリターに任せるのは良いことですが、PHP インタープリターはどのように Web サーバーと通信するのでしょうか?
異なる言語インタープリター (php、python インタープリターなど) と Web サーバー間の通信の問題を解決するために、CGI プロトコルが登場しました。 CGI プロトコルに従ってプログラムを作成する限り、言語インタプリタと Webwerver 間の通信を実現できます。 php-cgiプログラムなど。
cgi プロトコルを使用すると、php インタプリタと Web サーバー間の通信の問題が解決され、Web サーバーは最終的に動的言語を処理できるようになります。
ただし、Web サーバーはリクエストを受信するたびに CGI プロセスをフォークし、リクエストの完了後にプロセスを強制終了します。リクエストが 10,000 件ある場合、php-cgi プロセスを 10,000 回フォークして強制終了する必要があります。
これがリソースの無駄だと感じたことはありますか?
そこで、cgi の改良版、fast-cgi が登場しました。 fast-cgi は毎回リクエストを処理した後、プロセスを強制終了せずにプロセスを保持し、プロセスが一度に複数のリクエストを処理できるようにします。このようにして、毎回プロセスを再フォークする必要がなくなり、効率が大幅に向上します。
php-fpmはphp-Fastcgi Process Managerです。
php-fpmはFastCGIの実装であり、プロセス管理機能を提供します。
プロセスにはマスタープロセスとワーカープロセスの2種類のプロセスが含まれます。
ポートをリッスンし、Web サーバーからのリクエストを受信する役割を担うマスター プロセスは 1 つだけです。通常は複数のワーカー プロセスがあります (特定の数は実際のニーズに応じて構成されます)。各プロセスには PHP インタープリターがあります。内部に埋め込まれており、コードが実際に実行される PHP です。
Nginx には http リクエストを処理する機能があるだけでなく、その逆としても使用できることがわかっています。プロキシ。
つまり、Nginx は、リバース プロキシ機能を通じて動的リクエストをバックエンド Php-fpm に転送します。
新しい Nginx Php-fpm を設定しましょう
nginx ディレクトリに入り、nginx.conf ファイルを編集します。
図に示すように、nginx.conf の最後の行にインクルード ファイルを追加します
Enter上記のインクルード パスを指定して、A サーバーを追加します。
設定項目の意味を説明しましょう:
server { listen 80; #监听80端口,接收http请求 server_name www.example.com; #就是网站地址 root /usr/local/etc/nginx/www/huxintong_admin; # 准备存放代码工程的路径 #路由到网站根目录www.example.com时候的处理 location / { index index.php; #跳转到www.example.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; #nginx fastcgi进程监听的IP地址和端口 } }
In短い: www.example.com にアクセスすると、処理フローは次のとおりです:
##
www.example.com | | Nginx | | 路由到www.example.com/index.php | | 加载nginx的fast-cgi模块 | | fast-cgi监听127.0.0.1:9000地址 | | www.example.com/index.php请求到达127.0.0.1:9000 | | 等待处理。。。今度は、php の php-fpm を有効にして処理します。このリクエストphp-fpm.conf ファイルを開くと、次の設定が表示されます。
#つまり、php-fpm モジュールは 127.0 をリッスンします。 .0.1:9000 ポートにアクセスし、リクエストが処理されるのを待ちます。
3. 概要
nginx与php-fpm的结合,完整的流程是这样的。 www.example.com | | Nginx | | 路由到www.example.com/index.php | | 加载nginx的fast-cgi模块 | | fast-cgi监听127.0.0.1:9000地址 . | | www.example.com/index.php请求到达127.0.0.1:9000 | | php-fpm 监听127.0.0.1:9000 | | php-fpm 接收到请求,启用worker进程处理请求 | | php-fpm 处理完请求,返回给nginx | | nginx将结果通过http返回给浏览器
正常に起動したら、php-fpm プロセスを確認してみましょう
##上に示すように、1 つのマスター プロセスと 3 つのワーカー プロセスがあります。
2. Web サイトのディレクトリにファイルを作成します 以下に示すようにファイルを編集します:3. Web サイトにアクセスします
以上がPHP と nginx 間の動作メカニズムと原理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。