ホームページ  >  記事  >  バックエンド開発  >  Nginx、CGI、FastCGI、PHP-CGI、PHP-FPM の処理フロー

Nginx、CGI、FastCGI、PHP-CGI、PHP-FPM の処理フロー

WBOY
WBOYオリジナル
2016-07-29 08:58:04984ブラウズ

cgi fastcgi php-fpm php-cgi については、インターネット上にたくさんの説明があります。Baidu で確認できます。以下は私自身の理解です。

<code>1、web服务器
2、通信协议
3、进程、主进程、子进程
4、php解析器

CGI:Common Gateway Interface 公共网关接口,web服务器和脚本语言通信的一个标准、
接口、协议【协议】

FastCGI:CGI协议的升级版【协议】

PHP-CGI: 实现了CGI接口协议的PHP脚本解析器【程序】

PHP-FPM: 管理和调度php-cgi进程,进而实现了FastCGI接口协议的程序【程序】
</code>
<code>webserver只能处理静态文件,对于php这样的动态脚本无能为力,只能交给php自己来处理,
于是有了下面这个流程:

</code>

<code>但是上面架构有个性能问题,CGI对每个请求会parse一遍对应脚本的配置文件(如php.ini),
加载配置和扩展,初始化执行环境,性能非常差,所有有了下面的流程:
</code>
Nginx、CGI、FastCGI、PHP-CGI、PHP-FPM の処理フロー

Nginx、CGI、FastCGI、PHP-CGI、PHP-FPM の処理フローというプログラムです。 Fastcgi プロトコルを実装します。たとえば、PHP-FPM はどのように実装しますか?まず、Fastcgi はマスター プロセスを開始し、構成ファイルを解析し、実行環境を初期化してから、複数のワーカー プロセスを開始します。このワーカー プロセスは php-cgi です。リクエストが届くと、マスターはそれをワーカーに渡し、すぐに次のリクエストを受け入れることができます。これにより作業の重複が回避され、当然効率が高くなります。また、十分なワーカーがない場合、マスターは構成に応じて待機する複数のワーカー (20 個など) を事前に開始できます。もちろん、アイドル状態のワーカーが多すぎる場合は一部が停止されるため、パフォーマンスが向上し、リソースが節約されます。 。これがfastcgiのプロセス管理です。

以下はphp-fpm設定ファイルのワーカー数の設定項目です:

<code>; The maximum number of processes FPM will fork. This has been design to control
; the global number of processes when using dynamic PM within a lot of pools.
; Use it with caution.
; Note: A value of 0 indicates no limit
; Default Value: 0
; process.max = 128</code>

その場合、ワーカープロセスの最大数は128になります

FastCGIの詳しい説明は

<code>    fastcgi是基于cgi架构的扩展,他的核心思想就是在web server和具体cgi程序之间建立一个智能的可持续的中间层,统管cgi程序的运行,这样web server只需要将请求提交给这个层,这个层再派生出几个可复用的cgi程序实例,然后再把请求分发给这些实例,这些实例是可控的,可持续,可复用的,因此一方面避免了进程反复fork,另一方面又可以通过中间层的控制和探测机制来监视这些实例的运行情况,根据不同的状况fork或者回收实例,达到灵活性和稳定性兼得的目的。</code>
参考ドキュメント

https://segmentfault.com/q/1010000000256516

http://blog.csdn.net/zhuanshenweiliu/article/details/46413241

以上、Nginx、CGI、FastCGI、PHP-CGI、PHP-FPM の処理フローを関連内容も含めて紹介しましたので、PHP チュートリアルに興味のある方の参考になれば幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。