バックエンド サーバー (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
開いている接続が より少ない場合でも、接続は閉じられます。バックエンド サーバーには独自のキープアライブ タイムアウトがあり、これも別途調整する必要があります。