リバースプロキシとバックエンドサーバー間のSSL接続をアクティブに保つ

リバースプロキシとバックエンドサーバー間のSSL接続をアクティブに保つ

バックエンド サーバー (Apache) はほとんどのユーザーから遠すぎるため、キャッシュとして機能するより近いリバース プロキシを実装することを考えました。

一見すると、うまく機能しました。キャッシュされた静的ファイルは非常に高速に提供されますが、それ以外の場合は、リバース プロキシ (NGINX) がバックエンド サーバーに接続する必要があり、SSL ハンドシェイクに時間がかかるため、最初のリクエストが遅くなります。

これに関する情報を探していたのですが、この接続を維持する方法が見つかりませんでした。何か方法はあるのでしょうか?

Websocket についてさらに詳しく学ぼうとしましたが、私が見つけた実装はすべて特定の要求に応答するためのもので、両方の Web サーバー (リバース プロキシの NGINX とバックエンドの Apache) を仲介する接続を維持するものではありませんでした。

それを達成するために何を研究/使用/検索すればよいかについて、何かアイデアやヒントをお持ちの方はいらっしゃいますか?

よろしくお願いします!

答え1

nginxでは指定できるのはkeepaliveアップストリーム接続の場合、接続がupstreamブロック。例:

upstream backend {
    server private-api.example.com:443;

    keepalive 32;
}

ここでは、keepalive上流サーバーへの同時接続の最大数を指定します。ワーカープロセス

アップストリームを使用するには、proxy_passバックエンド アドレスの代わりにその名前を指定します。

たとえば、以前に以下を使用した場合:

     proxy_pass https://private-api.example.com:443;

次のように変更します。

     proxy_pass https://backend;

定義された をアップストリームの名前に文字通り置き換えますserver

また、HTTP バージョンを 1.1 に設定し (デフォルトが 1.0 になるのは不合理なため)、Connection ヘッダーをクリアする必要があります。

    proxy_http_version 1.1;
    proxy_set_header Connection "";

keepalive_timeoutで定義できるもupstreamあり、これを調整する必要がある場合があることに留意してください。デフォルトでは 60 秒であるため、接続がその時間アイドル状態になると、keepalive開いている接続が より少ない場合でも、接続は閉じられます。バックエンド サーバーには独自のキープアライブ タイムアウトがあり、これも別途調整する必要があります。

関連情報