Nginx + FPM の構成方法に関する記事はインターネット上にたくさんありますが、それらはどちらかというと運用の観点からのもので、その方法を説明していますが、なぜそれを行う必要があるのかについては説明しません。この記事は動作メカニズムから始まります。 Nginx と FPM の連携 Nginx と PHP がどのように連携するかを真に理解できるように、構成の背後にある原則を調べることから始めましょう。 Nginx と PHP がどのように連携するかを説明するには、まず CGI (Common Gateway Interface) と FastCGI という 2 つのプロトコルについて説明する必要があります。
CGI は Web サーバーとバックグラウンド言語間の対話用のプロトコルであり、このプロトコルを使用すると、開発者は任意の言語を使用して Web サーバーからのリクエストを処理し、コンテンツを動的に生成できます。しかし、CGI には致命的な欠点があります。それは、各リクエストを新しいプロセスにフォークする必要があるということです。Web の台頭により、高い同時実行性がますます標準になってきており、この非効率な方法では明らかに需要を満たすことができません。こうしてFastCGIが誕生し、やがてCGIは歴史の舞台から退いていきました。 FastCGI は、その名前が示すように、1 つのリクエストの処理後にプロセスを直接終了するのではなく、複数のリクエストを 1 つのプロセスで処理できるようにするもので、パフォーマンスが大幅に向上しました。
FPM (FastCGI Process Manager) については、FastCGI の実装であり、FastCGI プロトコルを実装する Web サーバーは FPM と通信できます。 FPM は、標準の FastCGI に対するいくつかの機能拡張も提供します。詳細については、公式ドキュメント「PHP: FPM インストール」を参照してください。
FPM は、マスター プロセスとワーカー プロセスを含む PHP プロセス マネージャーです。通常、複数のワーカー プロセス (特定の数は実際のニーズに基づいています。構成)、各プロセスには PHP インタプリタが組み込まれており、実際に PHP コードが実行される場所です。下の図は、私のローカル マシン上の fpm のプロセス状況です。マスター プロセス 1 つ、ワーカー プロセス 3 つです。 :
FPM から受信 リクエストが受信されて処理されるとき、具体的なプロセスは次のとおりです:
-
FPM のマスター プロセスがリクエストを受信します
-
マスター プロセスは、設定に従って特定のワーカー プロセスを割り当てます使用可能なプロセスがない場合は、リクエストを処理します。これが、Nginx を使用するときに 502 エラーが発生する理由でもあります。
-
ワーカープロセスはリクエストを処理し、タイムアウトになった場合は504エラーを返します
-
リクエストの処理が終了し、結果が返されます
FPM リクエストの受信から処理までのプロセスは次のようになりますでは、Nginx はどのようにリクエストを fpm に送信するのでしょうか?これはNginxレベルから説明する必要があります。
Nginx は Web サーバーであるだけでなく、http リクエストのプロキシに加えて、この記事の fpm に関連する fastcgi プロトコルなど、他の多くのプロトコル リクエストのプロキシとしても機能することがわかっています。 Nginx が fastcgi プロトコルを理解できるようにするために、Nginx は http リクエストを対応する fastcgi リクエストにマップする fastcgi モジュールを提供します。
Nginx の fastcgi モジュールは、主にこれらのマッピング関係を処理する fastcgi_param 命令を提供します。その主な役割は、Nginx の変数を PHP で理解できる変数に変換することです。
さらに、非常に重要なことは、fastcgi_pass コマンドです。このコマンドは、Nginx がすべての php リクエストを fastcgi リクエストに変換してリッスンするアドレスを指定するために使用されます。以下は、簡単に動作する Nginx 設定ファイルです:
この設定ファイルでは、ポート 80 でリッスンする新しい仮想ホストを作成します。Web ルート ディレクトリは /home/rf/projects/wordpress です。次に、location ディレクティブを使用して、.php で終わるすべてのリクエストを fastcgi モジュールに渡して処理します。これにより、すべての PHP リクエストが処理のために fpm に渡され、Nginx から fpm への閉ループが完了します。
これで、Nginx と FPM の間の通信プロセス全体がより明確になるはずです。
上
2016年4月2日北京
[注] この記事は知湖コラム http://zhuanlan.zhihu.com/p/20694204 で初公開されました

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。

PHPでは、特性は方法が必要な状況に適していますが、継承には適していません。 1)特性により、クラスの多重化方法が複数の継承の複雑さを回避できます。 2)特性を使用する場合、メソッドの競合に注意を払う必要があります。メソッドの競合は、代替およびキーワードとして解決できます。 3)パフォーマンスを最適化し、コードメンテナビリティを改善するために、特性の過剰使用を避け、その単一の責任を維持する必要があります。

依存関係噴射コンテナ(DIC)は、PHPプロジェクトで使用するオブジェクト依存関係を管理および提供するツールです。 DICの主な利点には、次のものが含まれます。1。デカップリング、コンポーネントの独立したもの、およびコードの保守とテストが簡単です。 2。柔軟性、依存関係を交換または変更しやすい。 3.テスト可能性、単体テストのために模擬オブジェクトを注入するのに便利です。

SplfixedArrayは、PHPの固定サイズの配列であり、高性能と低いメモリの使用が必要なシナリオに適しています。 1)動的調整によって引き起こされるオーバーヘッドを回避するために、作成時にサイズを指定する必要があります。 2)C言語アレイに基づいて、メモリと高速アクセス速度を直接動作させます。 3)大規模なデータ処理とメモリに敏感な環境に適していますが、サイズが固定されているため、注意して使用する必要があります。

PHPは、$ \ _ファイル変数を介してファイルのアップロードを処理します。セキュリティを確保するための方法には次のものが含まれます。1。アップロードエラー、2。ファイルの種類とサイズを確認する、3。ファイル上書きを防ぐ、4。ファイルを永続的なストレージの場所に移動します。

JavaScriptでは、nullcoalescingoperator(??)およびnullcoalescingsignmentoperator(?? =)を使用できます。 1.??最初の非潜水金または非未定されたオペランドを返します。 2.??これらの演算子は、コードロジックを簡素化し、読みやすさとパフォーマンスを向上させます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

SublimeText3 中国語版
中国語版、とても使いやすい

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ホットトピック



