ホームページ >運用・保守 >Nginx >Nginx で FastCGI を構成および最適化する方法

Nginx で FastCGI を構成および最適化する方法

WBOY
WBOY転載
2023-05-21 08:16:272786ブラウズ

fastcgi:

fastcgi は cgi から開発および改良されました。従来の CGI インターフェイス方式の主な欠点は、パフォーマンスが低いことです。これは、http サーバーが動的プログラムに遭遇するたびに、スクリプト パーサーを再起動して解析を実行する必要があり、結果が http サーバーに返されるためです。大量の同時アクセスを扱う場合、これはほとんど利用できません。また、従来の CGI インターフェース方式はセキュリティが低く、現在ではほとんど使用されていません。

fastcgi インターフェイス モードは c/s 構造を採用しており、http サーバーとスクリプト解析サーバーを分離し、スクリプト解析サーバー上で 1 つ以上のスクリプト解析デーモンを起動できます。 http サーバーが動的プログラムに遭遇するたびに、そのプログラムは fastcgi プロセスに直接配信されて実行され、その結果がブラウザーに返されます。この方法により、http サーバーは静的リクエストを排他的に処理したり、動的スクリプト サーバーの結果をクライアントに返すことができるため、アプリケーション システム全体のパフォーマンスが大幅に向上します。

nginx は、外部プログラムの直接呼び出しや解析をサポートしていません。すべての外部プログラム (PHP を含む) は、fastcgi インターフェイスを通じて呼び出す必要があります。 fastcgi インターフェイスは、Linux 上のソケットです (このソケットはファイル ソケットまたは IP ソケットにすることができます)。 CGI プログラムを呼び出すには、fastcgi ラッパーも必要です (ラッパーは、別のプログラムを開始するために使用されるプログラムとして理解できます) このラッパーは、ポートやファイル ソケットなどの固定ソケットにバインドされます。 nginx が fastcgi インターフェイスを介してこのソケットに CGI リクエストを送信すると、ラッパーはリクエストを受信し、新しいスレッドを生成します。このスレッドはインタープリターまたは外部プログラムを呼び出してスクリプトを処理し、戻りデータを読み取ります。その後、ラッパーは返されたデータは、fastcgi インターフェイスを介して固定ソケットに沿って nginx に渡され、最後に、nginx は返されたデータをクライアントに送信します。これが nginx fastcgi の全体的な操作プロセスです。詳細なプロセスは図に示すとおりです。

Nginx で FastCGI を構成および最適化する方法

#例:

Nginx で FastCGI を構成および最適化する方法

#nginx の fastcgi パラメータの最適化設定例

nginx fastcgi を設定した後、nginx での php 環境の高速かつ安定した動作を保証するために、いくつかの fastcgi 最適化命令を追加する必要があります。最適化の例を以下に示します。nginx メイン設定ファイルの http レベルに次のコードを追加します。

fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=test:10m inactive=5m; 
fastcgi_connect_timeout 300; 
fastcgi_send_timeout 300; 
fastcgi_read_timeout 300; 
fastcgi_buffer_size 64k; 
fastcgi_buffers 4 64k; 
fastcgi_busy_buffers_size 128k; 
fastcgi_temp_file_write_size 128k; 
fastcgi_cache test; 
fastcgi_cache_valid 200 302 1h; 
fastcgi_cache_valid 301 1d; 
fastcgi_cache_valid any 1m;

上記のコードの意味:

    コードの最初の行には、ファイル パス、ディレクトリ構造レベル、キーワード領域の保存時間、および非 fastcgi キャッシュが含まれます。アクティビティデータの削除時刻が設定されています。
  • fastcgi_connect_timeout は、バックエンド fastcgi への接続のタイムアウトを指定します。
  • fastcgi_send_timeout は、fastcgi にリクエストを送信するためのタイムアウトを指定します。この値は、2 つのハンドシェイクが完了した後に fastcgi にリクエストを送信するためのタイムアウトです。
  • fastcgi_read_timeout は、fastcgi 応答を受信するためのタイムアウトを指定します。この値は、2 回のハンドシェイクが完了した後の fastcgi 応答を受信するためのタイムアウトです。
  • fastcgi_buffer_size は、fastcgi 応答の最初の部分を読み取るために必要なバッファのサイズを指定するために使用されます。この値は、64kb のバッファが fastcgi 応答の最初の部分を読み取るために使用されることを示します。 response (応答ヘッダー) は、fastcgi_buffers オプションで指定されたバッファ サイズに設定できます。
  • fastcgi_buffers は、fastcgi 応答リクエストをバッファリングするためにローカルで使用する必要があるバッファーの数と大きさを指定します。 PHP スクリプトによって生成されたページ サイズが 256 kb の場合、4 つの 64 kb バッファーがキャッシュに割り当てられます。ページ サイズが 256 kb を超える場合、256 kb を超える部分は fastcgi_temp で指定されたパスにキャッシュされますが、これはデータはハードドライブよりもメモリ内で高速に処理できるため、良いアプローチではありません。通常、この値は、サイト内の PHP スクリプトによって生成されるページ サイズの中間値である必要があります。サイト内のほとんどのスクリプトによって生成されるページ サイズが 256kb の場合、この値は「16 16k」、「4」に設定できます。 64k」など。
  • fastcgi_busy_buffers_size のデフォルト値は、fastcgi_buffers のサイズの 2 倍です。
  • fastcgi_temp_file_write_size は、キャッシュ ファイルの書き込み時に使用されるデータ ブロックの大きさを示します。デフォルト値は fastcgi_buffers の 2 倍です。
  • fastcgi キャッシュを有効にし、fastcgi_cache の役割を参照する名前を付けます。キャッシュをオンにすることは非常に便利で、CPU の負荷を効果的に軽減し、502 エラーの発生を防ぐことができます。しかし、キャッシュをオンにすると、特定の状況によっては多くの問題が発生する可能性もあります。
  • fastcgi_cache_valid, fastcgi は、応答コードのキャッシュ時間を指定するために使用されます。例の値は、200 と 302 の応答が 1 時間キャッシュされ、301 の応答がキャッシュされることを示しています1 日間キャッシュされ、他の応答は 1 分間キャッシュされます。

以上がNginx で FastCGI を構成および最適化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。