目次
キープアライブの基本的な概要
キープアライブは、HTTP/1.1 プロトコルの機能で、HTTP 要求/応答サイクル後にクライアントとサーバー間の TCP 接続を開いたままにし、後続の要求で再利用できるようにします。これにより、TCP 接続の確立と終了の回数が減り、パフォーマンスが向上します。
(注: キープアライブは、TCP 層の長時間接続検出メカニズムです。キープアライブは、アプリケーション層の http プロトコルで使用されます。ヘッダーの Connection フィールドの値は、クライアントとサービスの間で長時間の接続を維持する必要性を示すだけです。これは、このフィールドを使用して、この接続が長時間接続を維持する必要があり、処理直後に接続を閉じないことを nginx に伝えると理解できます。)
- 接続の維持: キープアライブは、長時間の接続を維持し、接続タイムアウト期間内に再接続して、サーバーが常に実行されていることを保証します。
- 効率の向上: 長時間の接続を維持することで、接続の確立と終了に必要な時間が短縮され、サーバーの効率が向上します。
- 帯域幅の節約: キープアライブは長時間の接続を維持できるため、接続の確立と終了に必要なネットワーク トラフィックが減少し、帯域幅が節約されます。
- 安定性: ハートビート パケットを通じて接続を維持すると、サーバーが常に稼働していることが保証され、Web サイトの安定性と可用性が向上します。
HTTPS の長時間接続テクノロジを使用する理由は何ですか?
- 応答時間に対する高い要件。
- このサービスはパブリック ネットワーク上にあり、クライアントとサーバーの間で TCP によって確立される 3 ウェイ ハンドシェイクと 4 つの切断されたウェーブには約 40 ミリ秒かかります (実際のデータ パケットから計算)、合計で約 80 ミリ秒かかります。
- 各アクセス パーティは少数の IP のみを使用し、確立する必要がある要求接続の数は制限されています。
- 長時間接続テクノロジを使用すると、頻繁な TCP ハンドシェイクの数が大幅に削減され、応答時間が大幅に改善されます。同時に、長時間接続テクノロジが使用された場合でも、ソケットのセッション情報をキャッシュするために大量のシステム リソースを消費する必要がなくなります。
http {
upstream backend {
server 192.168.0.1:8080 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.0.2:8080 weight=1 max_fails=2 fail_timeout=30s;
keepalive 300;
}
server {
listen 8080 default_server;
server_name "";
location / {
proxy_pass http://backend;
proxy_http_version 1.1; #设置http版本为1.1
proxy_set_header Connection ""; #设置Connection为长连接(默认为no)
}
}
HTTP プロトコルでの長時間接続のサポートは、バージョン 1.1 以降でのみ使用できるため、 proxy_http_version ディレクティブを使用してバージョン 1.1 に設定することをお勧めします。HTTP1.0 はキープアライブ機能をサポートしていないため、HTTP1.1 を使用しない場合、バックエンド サービスは 101 エラーを返して切断されます。「Connection」ヘッダーはオプションでクリアできるため、クライアントと Nginx の間に短い接続がある場合でも、Nginx とアップストリームの間に長い接続を開くことができます。この場合、クライアント要求の「Connection」ヘッダーをサニタイズする必要があります。
クライアントと Nginx 間の接続を長時間維持するには、以下が必要です。
- - クライアントによって送信される HTTP リクエストには、「キープアライブ」ヘッダーが含まれる必要があります。
- - Nginx設定でキープアライブをサポート
Nginx のキープアライブ設定項目
キープアライブタイムアウト
Nginx は、keepalive_timeout を使用して、KeepAlive のタイムアウトと、各 TCP 接続を維持できる最長時間を指定します。Nginx のデフォルト値は 75 秒ですが、ブラウザによっては最大 60 秒しか維持しないため、60 秒に設定できます。0 に設定すると、キープアライブ接続は無効になります。
# 可用于 http, server, location 配置块
# 设置 TCP 链接保持 60 秒
keepalive_timeout 60s;
send_timeout
サーバーがクライアントにデータを送信するためのタイムアウト期間。この設定はフォワーダー全体に適用されるのではなく、クライアントの読み取り操作間に適用されます。この期間中にクライアントがデータを読み取らない場合、Nginx は接続を閉じます。
# 配置段: http, server, location
send_timeout 30s;
キープアライブリクエスト
keepalive_requests: デフォルトは 100 で、これは長い接続がリクエストを連続的に処理できる回数の制限です。この回数を超えると、長い接続は閉じられます。接続によって占有されているメモリを解放する必要がある場合は、リンクを閉じる必要があります。メモリが大きくない場合は、メモリを大きく開くことはお勧めできません。この構成。QPS が高いシナリオでは、このパラメータを増やす必要があります。
# 配置段: http, server, location
keepalive_request 10000;
アプリケーションシナリオ
いつ使用しますか?
ユーザーが現在の接続の次のステップで接続を再利用することは明らかで、ハンドシェイクの数が効果的に削減され、特に HTTPS 接続を確立するコストが大きくなります。
使われないのはいつですか?
キャッシュは通常、インライン リソースにアクセスするために使用され、キープアライブは必要ありません。長期にわたる TCP 接続は、システム リソースの無効な使用に簡単につながる可能性があります。