私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
[はじめに]: Nginx は、proxy_pass、uwsgi_pass、fastcgi_pass、scgi_pass などを含む、さまざまなアプリケーション層リバース プロキシ サポートを提供します。その中で、proxy_pass ディレクティブは、HTTP/HTTPS プロトコルのリバース プロキシを実装するための URL パラメーターを受け入れることができます。uwsgi_pass は、FastCGI サーバーへのプロキシに使用され、scgi_pass は、プロキシに使用されます。 SCGI (Simple Common Gateway Interface) アプリケーションに接続します。これらのディレクティブにより、Nginx はさまざまな種類のバックエンド サービスやアプリケーションを柔軟に処理できるようになります。この記事の焦点は scgi_pass です。
SCGI(Simple Common Gateway Interface) プロキシはエンギンクスサポートされている重要なリバース プロキシ方式の 1 つ。で、SCGI簡易版ですCG(Common Gateway Interface) プロトコル。より効率的な接続方法を提供するように設計されています。ウェブサーバーとアプリケーション。伝統的なCGに比べ、SCGI永続的な接続と簡素化されたプロトコル形式を使用することにより、リクエストごとのオーバーヘッドが大幅に削減されます。
SCGIプロトコルは、次の標準化された方法を定義します。ウェブサーバーとアプリケーションの間でリクエスト情報を渡し、レスポンスを受け取ります。単純なテキスト形式を使用してリクエスト ヘッダー情報を送信し、その後にリクエスト本文 (存在する場合) を送信します。このデザインにより、SCGI実装が簡単で、優れたパフォーマンスを提供します。
存存存存存存在するするするするするするウェブアプリケーションのアーキテクチャでは、SCGIとして活動したウェブサーバー(など)エンギンクス ) とバックエンド アプリケーション。いつエンギンクスクライアントから受け取ったウェブ要求されると、これらの要求を次のように変換できます。SCGIフォーマットしてから渡すSCGIプロトコルはバックエンド アプリケーション サーバーに送信されます。
このアプローチは、ネイティブにサポートするものに特に適しています。SCGIプロトコルプログラミング言語やフレームワークなどパイソンいくつかのウェブフレーム (例:フラップ)またはルビー一部のアプリケーション サーバー (ユニコーン )。を使用してSCGI、これらのアプリケーションは回避できますウェブ解析のオーバーヘッド、から直接処理ウェブサーバーへのリクエストを処理し、全体的なパフォーマンスを向上させます。
実際の応用では、SCGI使用シナリオには以下が含まれますが、これらに限定されません。
ハイパフォーマンスウェブアプリケーション: 多数の同時リクエストを処理する必要があるアプリケーションの場合、SCGI従来よりも優れたものを提供できるCGよりよい性能。
長時間実行されるプロセス: 状態を維持する必要がある特定のアプリケーションや長時間実行されるアプリケーションは、SCGIそしてウェブサーバーは永続的な接続を維持します。
言語固有の最適化: 特定のプログラミング言語またはフレームワークが使用している可能性があります。SCGIパフォーマンスの向上や実装の簡素化を示します。
までにエンギンクスで使われるscgi_pass
コマンドを使用すると、管理者は簡単に配置できますウェブリクエストをサポートに転送するSCGIバックエンドアプリケーションサーバー。これにより、構成プロセスが簡素化されるだけでなく、最適化の機会も提供されます。ウェブアプリケーションのパフォーマンスにより柔軟性が得られます。
SCGI(Simple Common Gateway Interface) プロトコルは、簡素化されたプロトコルです。CG特にのために設計されたプロトコルウェブサーバーとアプリケーション間の通信。次のような顕著な特徴があります。
シンプルさ:SCGIこのプロトコルは、単純なテキスト形式を使用してリクエスト ヘッダー情報を送信するため、プロトコルの実装とデバッグが比較的簡単になります。プロトコルの設計哲学は、十分な機能を提供しながらシンプルさを保つことです。
永続的な接続: 従来の接続との比較CG違う、SCGI永続的な接続をサポートします。これは、という意味ですSCGIサーバーは、リクエストごとに新しいプロセスやスレッドを作成せずに、複数のリクエストを処理できます。これにより、システム リソースのオーバーヘッドが大幅に削減され、全体的なパフォーマンスが向上します。
低いオーバーヘッド: によるSCGIプロトコルの設計はシンプルで、リクエスト処理中に追加のオーバーヘッドがほとんど発生しません。これにより、SCGI高い同時実行性の処理に特に適していますウェブアプリケーションシナリオ。
柔軟性:SCGIこのプロトコルを使用すると、任意のヘッダー情報を送信できるため、開発者に大きな柔軟性が提供されます。開発者は、特定のアプリケーションの要件を満たすために、必要に応じてヘッダー情報をカスタマイズできます。
言語の独立性:SCGIプロトコルの設計はプログラミング言語に依存しません。これは、任意のプログラミング言語で実装できることを意味し、開発者はプロジェクトのニーズに最も適した言語を選択できます。SCGIサーバ。
それでもSCGIそしてウェブに使用されますウェブ通信プロトコルは同じですが、設計目的と使用シナリオには大きな違いがあります。
対象ユーザー:ウェブこのプロトコルは主にクライアント (ブラウザなど) によって使用されます。ウェブサーバー間の通信SCGIこの協定は以下に焦点を当てていますウェブサーバーとバックエンド アプリケーション間の通信。
プロトコルの複雑さ:ウェブこのプロトコルは比較的複雑で、さまざまなプロトコルをサポートするための大量のヘッダー情報とメソッドが含まれています。ウェブインタラクティブなシーン。対照的に、SCGIこのプロトコルはより単純で、要求と応答を配信するために必要な情報のみが含まれています。
パフォーマンスに関する考慮事項:ウェブサーバーとアプリケーションの間で使用されますSCGIの代わりにウェブプロトコル解析のオーバーヘッドは、次の理由により削減できます。SCGI形式はよりシンプルかつ直接的です。これにより、同時実行性の高いシナリオでパフォーマンスが大幅に向上する可能性があります。
接続管理:1.1 の永続的な接続の概念が導入されましたが、ウェブサーバーとアプリケーションの間で使用されますウェブ追加の接続管理が必要になる場合があります。SCGI永続的な接続のサポートが組み込まれているため、このプロセスが簡素化されます。
使用するシーン:ウェブインターネットの基本プロトコルであり、さまざまな用途に適用されます。ウェブコミュニケーションシナリオ。SCGI主に次の目的で使用されますウェブサーバーとバックエンド アプリケーション間の内部通信、特に高性能の処理が必要なシナリオで。
SCGIそして高速CGI全てCGの改良版ウェブアプリケーションのパフォーマンス。これらにはいくつかの類似点がありますが、いくつかの重要な違いもあります。
プロトコルの複雑さ:SCGI一致率高速CGIもっとシンプルに。SCGIシンプルなテキスト形式を使用してヘッダー情報を送信しますが、高速CGIバイナリ形式を使用します。これにより、SCGI実装とデバッグは簡単ですが、若干劣る可能性があります。高速CGIパフォーマンス。
多重化:高速CGI単一の接続での複数のリクエストの処理 (多重化) をサポートします。SCGI通常、接続ごとに処理されるリクエストは 1 つだけです。これは、特定の同時実行性の高いシナリオでは、高速CGIパフォーマンスが向上する可能性があります。
レコードタイプ:高速CGIいくつかのレコード タイプが定義されています (例:標準入力、標準出力、標準エラー出力など)、より詳細な制御が可能になります。SCGI主にリクエストとレスポンスの送信に焦点を当てた、より単純なアプローチが採用されています。
言語サポート: による高速CGI長く存在するほど、さまざまなプログラミング言語やフレームワークでのサポートがより広範囲になる可能性があります。しかし、SCGIそのシンプルさにより、一部の言語での実装がより簡単になる可能性があります。
パフォーマンス: ほとんどの場合、SCGIそして高速CGIパフォーマンスの差は大きくありません。使用するプロトコルの選択は、多くの場合、特定のアプリケーションのニーズ、開発言語のサポート、および個人の好みによって決まります。
存存存存存存在するするするするするするエンギンクス設定、scgi_pass
ディレクティブはリクエストを渡すために使用されます。SCGIサーバーの主要なディレクティブ。それは定義しますエンギンクスリクエストの転送先SCGIサーバーまたはサーバー グループ。
scgi_pass
コマンドの基本的な構文は次のとおりです。
scgi_pass address;
で、address
次の形式にすることができます。
例えば:scgi_pass localhost:9000;
この場合、エンギンクスリクエストは、ローカル ホスト上で実行され、ポート 9000 でリッスンしているサーバーに転送されます。SCGIサーバ。
例えば:scgi_pass unix:/tmp/scgi.socket;
ここ、エンギンクス指定されたものを渡しますユニックスドメインソケットSCGIサーバー通信。この方法が通常使用されますSCGIサーバー付きエンギンクス同じマシン上で実行すると、パフォーマンスが向上します。
例えば:scgi_pass scgi_backend;
この使い方では、scgi_backend
は1つですエンギンクス構成ファイル内の事前定義されたアップストリーム サーバー グループ。これにより、ロード バランシングやフェイルオーバーなどの高度な機能を実装できます。
scgi_pass
説明書は通常入っていますlocation
特定の処理を行うためにブロック内で使用されますメールアドレスパス。例えば:
location /scgi/ {
scgi_pass localhost:9000;
include scgi_params;
}
この例では、すべて/scgi/
最初のリクエストはローカル ポート 9000 に転送されます。SCGIサーバ。
include scgi_params;
ステートメントには、一連の設定を設定する事前定義された構成ファイルが含まれています。SCGIパラメータ。これらのパラメータは以下を定義しますエンギンクス方法ウェブリクエスト情報は次のように変換されます。SCGI聞く。
注目に値するのは、scgi_pass
ディレクティブは他のディレクティブと組み合わせることができますエンギンクスディレクティブは、より複雑な構成を実現するために組み合わせて使用されます。たとえば、次のように使用できますif
さまざまな条件に基づいてさまざまなオプションを選択するための条件ステートメントSCGIサーバ:
location / {
if ($request_method = POST) {
scgi_pass localhost:9001;
}
scgi_pass localhost:9000;
include scgi_params;
}
この例では、役職リクエストはポート 9001 に転送され、その他のリクエストはすべてポート 9000 に転送されます。
scgi_pass
そしてproxy_pass
これらはすべて一般的に使用されるリバース プロキシ命令であり、要求をバックエンド サーバーに転送します。
で、scgi_pass
サポート付きで使用するように設計されていますSCGIバックエンドサーバー通信用のプロトコル。SCGI簡略化されたものですCGのために設計されたプロトコルウェブサーバーとアプリケーション間の効率的な通信。対照的に、proxy_pass
これは、さまざまなプロトコルをプロキシするために使用できる、より一般的なディレクティブです。ウェブ、翻訳、高速CGI待って。
使用中でscgi_pass
時間、エンギンクス受け取りますウェブリクエストは次のように変換されます。SCGIフォーマットしてバックエンドに送信するSCGIサーバ。このプロセス中に、エンギンクスバックエンドサーバーがリクエストを正しく理解して処理できるように、プロトコル変換を処理します。そしてproxy_pass
通常、プロトコルを変換せずに、リクエストをそのままの状態でバックエンド サーバーに転送するために使用されます。
もう 1 つの重要な違いは、その構成方法です。scgi_pass
通常は協力が必要ですscgi_param
設定に使用するディレクティブSCGIプロトコルで必要なパラメータ。例えば:
location /app/ {
scgi_pass localhost:9000;
include scgi_params;
scgi_param SCRIPT_FILENAME /path/to/app$fastcgi_script_name;
}
この例では、include scgi_params
事前定義されたものを導入SCGIパラメータ、一方scgi_param
ディレクティブは追加パラメータを設定するために使用されます。
対照的に、proxy_pass
通常、構成はよりシンプルで簡単です。
location /api/ {
proxy_pass http://backend_server;
}
性能面では、scgi_pass
そしてproxy_pass
それぞれに独自の利点があります。特別に設計された使用のためにSCGIプロトコルアプリケーション、scgi_pass
を回避できるため、パフォーマンスが向上する可能性があります。ウェブプロトコルのオーバーヘッド。しかし、proxy_pass
その多用途性により、柔軟性が高まり、さまざまなバックエンド サーバーやプロトコルに適応できます。
セキュリティも考慮すべき側面です。なぜならscgi_pass
専用のSCGIこのプロトコルにより、バックエンド サーバーとの通信方法が制限されるため、場合によってはセキュリティが向上する可能性があります。そしてproxy_pass
その汎用性により、特に機密データを扱う場合には、セキュリティを確保するために追加の構成が必要になる場合があります。
実際のアプリケーションでは、使用することを選択しますscgi_pass
まだproxy_pass
主にバックエンド アプリケーションの特性と要件に依存します。バックエンド アプリケーションが特に使用するように設計されている場合SCGI合意、それではscgi_pass
より良い選択かもしれません。バックエンドが標準の場合ウェブサーバーまたはアプリケーション、サポートされていない、または必須ではありませんSCGI、それでproxy_pass
の方が適切かもしれません。
scgi_pass
指示は、エンギンクス加工に使用されるSCGI (Simple Common Gateway Interface) コア命令が要求されました。その仕組みには、クライアント要求の受信から処理された応答をクライアントに返すまでの複数のステップが含まれます。
まず、いつエンギンクスお客様から頂きましたウェブリクエストが行われると、構成ファイル内のルールに基づいてリクエストを処理する方法が決定されます。リクエストが一致する場合は、scgi_pass
命令のロケーションブロック、エンギンクス始まりますSCGI処理の流れ。
存存存存存存在するするするするするするSCGI加工の過程で、エンギンクスまず、SCGIサーバー接続。この接続は次のように行うことができます通信プロトコルソケットまたはユニックスドメインソケット(依存)scgi_pass
命令で指定されたアドレス。上流サーバーグループを使用する場合、エンギンクス構成された負荷分散アルゴリズムに基づいて、特定のサーバーも選択されます。
接続が確立された後、エンギンクス意思ウェブリクエストは次のように変換されます。SCGIフォーマット。このプロセスには、SCGIリクエストヘッダーとリクエストボディ。SCGIリクエスト ヘッダーには、リクエスト メソッド、パス、クエリ文字列、クライアントなどのリクエストに関するメタデータを提供する一連のキーと値のペアが含まれています。IP住所などこの情報のほとんどはオリジナルからのものですウェブリクエストヘッダーが含まれる場合もありますが、scgi_param
コマンドによって設定される追加パラメータ。
SCGIリクエスト ヘッダーの形式は特殊です。ヘッダー全体の長さを示す数値で始まり、コロンが続き、次にヌル文字で終わる一連のキーと値のペアが続き、最後にカンマで終わります。たとえば、簡略化されたSCGIリクエスト ヘッダーは次のようになります。
70:CONTENT_LENGTH27SCGI1REQUEST_METHODGETquery_string,
この例では、「70」はヘッダーの合計長を表し、その後に 3 つのキーと値のペアが続きます。CONTENT_LENGTH
、SCGI
そしてREQUEST_METHOD
。
リクエストヘッダーを送信した後、エンギンクスリクエスト本文が送信されます (存在する場合)。のために得る通常、リクエストにはリクエスト本文がありませんが、役職または置くリクエストの場合、リクエスト本文にはフォーム データまたは他の種類のコンテンツが含まれる場合があります。
SCGIサーバーはリクエストを受信すると、リクエストを処理して応答を生成します。応答は同じ接続経由で返送されますエンギンクス。SCGI応答の形式は比較的単純で、空白行で区切られた応答ヘッダーと応答本文が含まれます。
エンギンクス受け取ったSCGIサーバーの応答後、次のように変換されます。ウェブ応答形式。このプロセスには解析が含まれますSCGI応答ヘッダー、適切に設定ウェブ応答ヘッダーを取得し、応答本文をそのままクライアントに渡します。
プロセス全体において、エンギンクス接続のライフサイクルの管理も担当します。これには、接続タイムアウトの処理、接続プーリングの管理 (有効な場合) が含まれます。keepalive
)、ネットワークエラーなどを処理します。処理中にエラーが発生した場合、エンギンクス設定に従って、適切なエラー応答がクライアントに返されます。
加えて、scgi_pass
作業プロセスはノンブロッキングです。これはつまりエンギンクス複数処理できるSCGIリクエストごとに新しいプロセスやスレッドを作成せずにリクエストを実行できます。このデザインにより、エンギンクス多数の同時接続を効率的に処理する機能。
存存存存存存在するするするするするするエンギンクス中程度の構成scgi_pass
の基本的な例は比較的単純です。この構成により、エンギンクス特定のパスに対するリクエストを転送するSCGIサーバ。基本的な構成例を次に示します。
まず、開きますエンギンクスメインの設定ファイルは通常次の場所にあります。/etc/nginx/nginx.conf
または/usr/local/nginx/conf/nginx.conf
。このファイルでは次のことを行う必要がありますhttp
ブロック内で追加または変更するserver
ピース。
存存存存存存在するするするするするするserver
ブロック、を追加しますlocation
どのリクエストを転送するかを定義するディレクティブSCGIサーバ。たとえば、すべてを追加したい場合は、/scgi/
先頭のリクエストは、ローカル ポート 9000 で実行されているサーバーに転送されます。SCGIサーバーでは、次の構成を使用できます。
http {
server {
listen 80;
server_name example.com;
location /scgi/ {
scgi_pass localhost:9000;
include scgi_params;
}
}
}
この構成では、listen 80
指示が伝えるエンギンクスポート 80 (標準) でリッスンしますウェブポート)。server_name
ディレクティブは、このサーバー ブロックが応答するドメイン名を定義します。
location /scgi/
ブロックはすべてを定義します/scgi/
始まりメールアドレスリクエストはすべて処理される必要があります。このブロック内で使用するのはscgi_pass
指定するコマンドSCGIサーバーのアドレスとポート。この例では、SCGIサーバーは同じマシン上で実行されています (localhost
) ポート 9000。
include scgi_params;
ステートメントには、一連の設定を設定する事前定義された構成ファイルが含まれています。SCGIパラメータ。これらのパラメータは以下を定義しますエンギンクス方法ウェブリクエスト情報は次のように変換されます。SCGI聞く。通常、このファイルは次の場所にあります。/etc/nginx/scgi_params
または/usr/local/nginx/conf/scgi_params
。
もしあなたのSCGIサーバーには追加のパラメータが必要です。これを使用できます。scgi_param
設定するコマンド。たとえば、設定する必要がある場合は、SCRIPT_FILENAME
パラメータは次のように設定できます。
location /scgi/ {
scgi_pass localhost:9000;
include scgi_params;
scgi_param SCRIPT_FILENAME /path/to/your/scripts$fastcgi_script_name;
}
ここ、SCRIPT_FILENAME
パラメータは、スクリプトへの実際のパスに設定されます。$fastcgi_script_name
ですエンギンクス要求されたスクリプト名を表す変数。
もしあなたのSCGIサーバーの使用状況ユニックス代わりにドメインソケット通信プロトコルポートは次のように構成できます。
location /scgi/ {
scgi_pass unix:/tmp/scgi.socket;
include scgi_params;
}
この例では、エンギンクス経由で検索されます/tmp/scgi.socket
のユニックスドメインソケットSCGIサーバー通信。
構成が完了したら、リロードまたは再起動する必要がありますエンギンクス変更が有効になるまで。次のコマンドが使用できます。
sudo nginx -s reload
または
sudo systemctl restart nginx
この基本構成は、scgi_pass
良い出発点を提供します。特定のニーズに応じて、さらに調整や最適化が必要になる場合があります。たとえば、バッファリングやタイムアウトを構成したり、負荷分散のためにアップストリーム サーバー グループを設定したりする必要がある場合があります。これらの構成オプションについては、後続の章で詳しく説明します。
存存存存存存在するするするするするするエンギンクス 、アップストリーム モジュールを使用すると、負荷分散とフェイルオーバーに使用できるサーバーのセットを定義できます。一緒にいるときscgi_pass
上流モジュールは、ディレクティブと組み合わせて使用すると大幅に拡張できます。SCGIエージェントの柔軟性と信頼性。
上流モジュールの基本構文は次のとおりです。
upstream backend_name {
server address1;
server address2;
# 更多服务器...
}
この構成では、backend_name
は、このサーバーのグループに指定した名前です。後で使用できます。scgi_pass
指令で引用されています。それぞれserver
このディレクティブはバックエンド サーバーのアドレスを定義します。IPアドレスとポート番号。これも可能ですユニックスドメインソケットのパス。
たとえば、次のようなファイルを定義できます。scgi_servers
上流グループ:
upstream scgi_servers {
server 127.0.0.1:9000;
server 127.0.0.1:9001;
server unix:/tmp/scgi.socket;
}
上流を定義した後、次のことができます。scgi_pass
ディレクティブで使用します。
location /app/ {
scgi_pass scgi_servers;
include scgi_params;
}
それで、エンギンクスリクエストは以下に配布されますscgi_servers
グループ内のサーバー。
アップストリーム モジュールは、サーバー ディレクティブの後にパラメーターを追加することで構成できるさまざまな負荷分散アルゴリズムを提供します。
ラウンドロビン (デフォルト): リクエストを各サーバーに順番に分散します。
重み付きポーリング: 各サーバーの重みを指定でき、重みが大きいサーバーほど多くのリクエストを受け取ります。例えば:
upstream scgi_servers {
server 127.0.0.1:9000 weight=3;
server 127.0.0.1:9001 weight=1;
}
least_conn
命令:upstream scgi_servers {
least_conn;
server 127.0.0.1:9000;
server 127.0.0.1:9001;
}
ip_hash
命令:upstream scgi_servers {
ip_hash;
server 127.0.0.1:9000;
server 127.0.0.1:9001;
}
アップストリーム モジュールは、サーバーのヘルス チェックとフェイルオーバー機能も提供します。たとえば、次のように使用できます。max_fails
そしてfail_timeout
障害検出を構成するパラメータ:
upstream scgi_servers {
server 127.0.0.1:9000 max_fails=3 fail_timeout=30s;
server 127.0.0.1:9001 max_fails=3 fail_timeout=30s;
}
この構成では、サーバーに 30 秒以内に 3 回連続で障害が発生した場合、エンギンクスこれは使用不可としてマークされ、次の 30 秒間はリクエストが送信されなくなります。
さらに、次のこともできます。backup
バックアップ サーバーを指定するパラメータ。すべてのプライマリ サーバーが利用できない場合にのみ使用されます。
upstream scgi_servers {
server 127.0.0.1:9000;
server 127.0.0.1:9001;
server 127.0.0.1:9002 backup;
}
上流モジュールを適切に使用することで、高可用性と高性能のシステムを構築できます。SCGIエージェントクラスタ。これにより、アプリケーションの全体的なパフォーマンスが向上するだけでなく、システムの信頼性と耐障害性も向上します。実際のアプリケーションでは、最高のシステム パフォーマンスを得るために、特定のニーズとシナリオに基づいて適切な負荷分散戦略とフェイルオーバー メカニズムを選択する必要があります。
構成中エンギンクスのscgi_pass
ディレクティブでは、指定する主なオプションが 2 つありますSCGIサーバーアドレス:ユニックスドメインソケットと通信プロトコルソケット。どちらの方法にも独自の長所と短所があり、どちらの方法を選択するかは、特定のアプリケーションのシナリオとニーズによって異なります。
ユニックスドメインソケットはプロセス間通信の一種です(国際PC ) 同じマシン上のプロセスが効率的に通信できるようにするメカニズム。存在するエンギンクス設定、ユニックスドメインソケットのアドレスは通常、ファイルパスとして表されます。例えば:
scgi_pass unix:/tmp/scgi.socket;
使用ユニックスドメイン ソケットの主な利点はそのパフォーマンスです。通信は同じマシン上で行われ、ネットワーク プロトコル スタックを経由する必要がないため、ユニックス通常、ドメインソケットは以下よりも小さいです。通信プロトコルソケットの方が高速です。彼らは避けるプロトコルデータ パケットのカプセル化とカプセル化解除、ネットワークの輻輳制御など、プロトコルによって生じるオーバーヘッド。これにより、ユニックスドメインソケットは特に次の用途に適しています。エンギンクスそしてSCGIサーバーは同じマシン上で実行されます。
もう1つは使用しますユニックスドメインソケットの利点はセキュリティです。通信はローカル マシンに限定されているため、当然のことながらネットワーク全体からの攻撃の影響を受けません。さらに、ファイル システムのアクセス許可を使用してソケット ファイルへのアクセスを制御し、追加のセキュリティ層を提供できます。
しかし、ユニックスドメインソケットにも制限があります。最も明白なことは、これらは同じマシン上のプロセス間通信にのみ使用できるということです。もしエンギンクスそしてSCGIサーバーは別のマシンで実行する必要があるため、使用できませんユニックスドメインソケット。
対照的に、通信プロトコルソケットの使用状況IPアドレスとポート番号を使用してサーバーアドレスを指定します。例えば:
scgi_pass 127.0.0.1:9000;
通信プロトコルソケットの主な利点は柔軟性です。彼らは許可しますエンギンクスそしてSCGIサーバーは異なるマシン上で実行されます。これは、水平方向のスケーラビリティを必要とする分散システムまたはアプリケーションに必要です。使用通信プロトコルソケットを使用すると、負荷分散を簡単に実装でき、リクエストを複数に分散できます。SCGIサーバ。
もう一つの利点は、通信プロトコルソケットを使用すると、ネットワーク レベルの監視とデバッグが容易になります。標準的なネットワークツールを使用して、通信状況の確認や問題の診断を簡単に行うことができます。
しかし、通信プロトコルソケットの主な欠点は、パフォーマンスがソケットよりわずかに低いことです。ユニックスドメインソケット。同じマシン上で通信している場合でも、データは完全なネットワーク プロトコル スタックを通過する必要があるため、追加のオーバーヘッドが発生します。さらに、使用通信プロトコルソケットでは、ファイアウォール ルールの設定、TLS/SSL のセキュリティ暗号化など
使用を選択するときユニックスドメインソケットはまだ通信プロトコルソケットを使用する場合は、次の要素を考慮する必要があります。
性能要件:最高の性能を追求する場合、エンギンクスそしてSCGIサーバーは同じマシン上にあるため、選択する必要がありますユニックスドメインソケット。
導入アーキテクチャ: ifエンギンクスそしてSCGIサーバーを別のマシンで実行する必要がある場合、または負荷分散を実現する必要がある場合は、次を使用する必要があります。通信プロトコルソケット。
セキュリティ要件: セキュリティが主な関心事であり、マシン間通信が必要ない場合は、ユニックスドメインソケットの方が良い選択かもしれません。
スケーラビリティ: 次のことが必要になることが予想される場合SCGIサーバーを複数のマシンに拡張するには、次を使用します。通信プロトコルソケットのスキーマ調整が容易になります。
デバッグと監視のニーズ: 監視とデバッグに標準のネットワーク ツールを使用する必要がある場合は、通信プロトコルソケットの方が適しているかもしれません。
要するに、ユニックスドメインソケットと通信プロトコルソケットはすべて有効な選択肢です。選択は、特定のアプリケーションのニーズ、パフォーマンス要件、展開環境に基づいて行う必要があります。特に高性能を追求する場合は多くの場合、エンギンクスそしてSCGIサーバーが同じマシン上に共存する場合、ユニックスドメインソケットの方が良い選択かもしれません。ただし、より高い柔軟性や分散展開が必要な場合は、通信プロトコルソケットは必須のオプションです。
この章では詳しく説明しますscgi_pass
3 つの主要な高度な構成側面: タイムアウト設定、バッファー構成、および接続プール管理。
タイムアウト設定は、エンギンクスそしてSCGIサーバー間の通信の信頼性の鍵。タイムアウトを適切に構成すると、問題が発生した場合にリクエストが無期限にハングするのを防ぐことができ、同時に低速接続に対して十分な処理時間を提供できます。
エンギンクス複数の機能を提供しますscgi_pass
関連するタイムアウト手順:
初めにscgi_connect_timeout
を定義します。エンギンクスそしてSCGIサーバーが接続を確立するまでの最大待ち時間。指定時間内に接続が確立できない場合は、エンギンクスエラーが返されます。例えば:
scgi_connect_timeout 60s;
この構成では、接続タイムアウトが 60 秒に設定されます。
第二に、scgi_read_timeout
指定されたエンギンクスからSCGIサーバーの応答読み取りのタイムアウト。もしSCGIこの間、サーバーはデータを送信しなかったため、接続は閉じられます。例えば:
scgi_read_timeout 60s;
やっと、scgi_send_timeout
すでにセットアップされていますエンギンクスに向かってSCGIサーバーがリクエストを送信するためのタイムアウト期間。指定時間内であればSCGIサーバーはデータを受信しなかったため、接続は閉じられます。例えば:
scgi_send_timeout 60s;
これらのタイムアウト設定は、実際のアプリケーションのニーズに基づいて調整する必要があります。ほとんどのアプリケーションでは、デフォルト値で十分です。ただし、長時間実行されるリクエストによっては、これらのタイムアウト値を増やす必要がある場合があります。
最適化のためのバッファ構成エンギンクスそしてSCGIサーバー間のデータ転送は重要です。適切なバッファ設定により、応答速度が向上し、リソース消費が削減されます。
scgi_buffer_size
読み取り時の設定手順SCGIサーバーの応答の最初の部分のバッファ サイズ。通常、これには小さな応答ヘッダーが含まれます。例えば:
scgi_buffer_size 4k;
scgi_buffers
読み取り用の命令が定義されているSCGIサーバー応答のバッファーの数とサイズ。例えば:
scgi_buffers 8 4k;
この構成では、4K サイズのバッファーが 8 つ作成されます。
応答がメモリに完全に収まらない場合は、次を使用できます。scgi_max_temp_file_size
一時ファイルの最大サイズを制限するディレクティブ:
scgi_max_temp_file_size 1024m;
これにより、一時ファイルの最大サイズが 1024MB に制限されます。
大規模な応答の場合は、次を使用できますscgi_busy_buffers_size
ビジー状態で使用可能なバッファ サイズを制限するディレクティブ:
scgi_busy_buffers_size 8k;
最適なパフォーマンスを得るには、アプリケーションの特性とサーバー リソースに基づいてこれらのバッファ設定を調整する必要があります。
接続プール管理が最適化されますエンギンクスそしてSCGIサーバー間の通信におけるもう 1 つの重要な側面。接続を再利用することで、新しい接続を確立する際のオーバーヘッドが大幅に削減され、全体的なパフォーマンスが向上します。
scgi_keepalive
アップストリームを構成するためのディレクティブSCGIサーバーが維持できるアイドル状態の接続の最大数。例えば:
scgi_keepalive 10;
この構成により、各ワーカー プロセスは最大 10 個のアイドル状態のキープアライブ接続を維持できます。
使えるscgi_http_version
指定するコマンドエンギンクスと一緒に使用されるSCGIサーバー通信ウェブプロトコルのバージョン:
scgi_http_version 1.1;
使用1.1 の存続期間の長い接続を有効にすることができます。これは、接続プールの効率を維持するために重要です。
さらに、次のこともできます。scgi_next_upstream
どの状況でリクエストを次のサーバーに渡すかを制御するディレクティブ:
scgi_next_upstream error timeout invalid_header http_500;
この構成では、エラーの発生時、タイムアウトの発生時、無効なヘッダーの受信時、またはウェブ 500 エラーの場合、リクエストは次のサーバーに渡される必要があります。
書かれること
この記事で詳しく説明しますエンギンクス真ん中scgi_pass
特に重点を置いた指示の適用パイソンアプリケーションの構成と展開。最初に紹介したのはSCGI次に、プロトコルの特徴と利点について詳しく説明しました。scgi_pass
ディレクティブの基本構文と高度な構成オプション。実際の事例を通して、その方法を示します。Python のフラップフレーム構成scgi_pass
、基本設定、負荷分散、接続プーリング、バッファ管理が含まれます。