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

Aug 19 2020

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

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

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

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

それを達成するために何を勉強/使用/検索するかについて何かアイデアやヒントを持っている人はいますか?

よろしくお願いします!

回答

MichaelHampton Aug 19 2020 at 07:54

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