Docker || Wordpress || PHP
1467 ワード
WebサーバとCGI
まず、CGIは何をしていますか?CGIはウェブサーバから伝達されるデータが標準フォーマットであることを保証するため、CGIプログラムの作成者を便利にする.
Webサーバ(例えばnginx)はコンテンツの配布者にすぎない.たとえば、
Webサーバが
はい、CGIはプロトコルで、プロセスとかは関係ありません.fastcgiは何ですか?Fastcgiは、CGIプログラムのパフォーマンスを向上させるために使用されます.
パフォーマンスを向上させるには、CGIプログラムのパフォーマンスの問題はどこにあるのでしょうか.「PHP解析器はphp.iniファイルを解析し、実行環境を初期化します」というのがここです.標準的なCGIはリクエストごとにこれらのステップを実行します(暇ではありません!プロセスを起動するのは疲れています!)、だから、時間ごとに処理する時間が長くなります.これは明らかに不合理ですね.ではFastcgiはどうやって作ったのでしょうか?まず、Fastcgiはまずマスターを起動し、プロファイルを解析し、実行環境を初期化してから、複数のworkerを起動します.リクエストが来ると、masterはworkerに渡され、すぐに次のリクエストを受け入れることができます.このように繰り返しの労働を避けることができて、効率は自然に高いです.また、workerが足りない場合、masterは構成に応じていくつかのworkerを起動して待つことができます.もちろん空きworkerが多すぎると、少し止まってしまい、パフォーマンスが向上し、リソースも節約できます.これがfastcgiのプロセス管理です.
まず、CGIは何をしていますか?CGIはウェブサーバから伝達されるデータが標準フォーマットであることを保証するため、CGIプログラムの作成者を便利にする.
Webサーバ(例えばnginx)はコンテンツの配布者にすぎない.たとえば、
/index.html
が要求されると、web serverはファイルシステムに行ってこのファイルを見つけ、ブラウザに送信します.ここで配布されるのは静的データです.はい、もし今要求しているのが/index.php
で、プロファイルによると、nginxはこれが静的ファイルではないことを知っていて、PHP解析器を探して処理する必要があるならば、彼はこの要求を簡単に処理してPHP解析器に渡します.NginxはどのようなデータをPHP解析器に伝えますか?urlはあるでしょう.検索文字列もあるでしょう.POSTデータもあります.HTTPヘッダは少なくないでしょう.はい、CGIはどのデータを転送し、どのようなフォーマットで後方にこの要求を処理するかを規定するプロトコルです.PHPコードで使用しているユーザーがどこから来たのかよく考えてみてください.Webサーバが
/index.php
というリクエストを受信すると、対応するCGIプログラムが起動します.ここがPHPの解析器です.次にPHP解析器がphpを解析する.iniファイルは、実行環境を初期化し、要求を処理し、処理後の結果を所定CGIで所定のフォーマットで返し、プロセスを終了します.Webサーバは、結果をブラウザに返します.はい、CGIはプロトコルで、プロセスとかは関係ありません.fastcgiは何ですか?Fastcgiは、CGIプログラムのパフォーマンスを向上させるために使用されます.
パフォーマンスを向上させるには、CGIプログラムのパフォーマンスの問題はどこにあるのでしょうか.「PHP解析器はphp.iniファイルを解析し、実行環境を初期化します」というのがここです.標準的なCGIはリクエストごとにこれらのステップを実行します(暇ではありません!プロセスを起動するのは疲れています!)、だから、時間ごとに処理する時間が長くなります.これは明らかに不合理ですね.ではFastcgiはどうやって作ったのでしょうか?まず、Fastcgiはまずマスターを起動し、プロファイルを解析し、実行環境を初期化してから、複数のworkerを起動します.リクエストが来ると、masterはworkerに渡され、すぐに次のリクエストを受け入れることができます.このように繰り返しの労働を避けることができて、効率は自然に高いです.また、workerが足りない場合、masterは構成に応じていくつかのworkerを起動して待つことができます.もちろん空きworkerが多すぎると、少し止まってしまい、パフォーマンスが向上し、リソースも節約できます.これがfastcgiのプロセス管理です.
# Docker
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)