Nginx のメモリ使用量が多いため SSL が重複している

Nginx のメモリ使用量が多いため SSL が重複している

多数の仮想ホスト(約 600)で NGINX を実行していますが、残念ながら NGINX ワーカーはそれぞれ大量のレジデンシャル メモリ(約 6 GB)を使用しています。

メモリ (文字列) を検査すると、SSL 証明書に通常見られる重複したメタ情報 (最大 100,000 回以上重複) が生成されます。私たちは、ほんの一握りの異なる証明書のみを使用しています。

ssl_session_cacheが原因かもしれないと疑った。

ssl_session_cache 共有:SSL:10m;

これはメモリ使用量(10MB*600=6GB)にうまく加算されますが、ドキュメントによるとhttp://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_session_cache

同じ名前のキャッシュを複数の仮想サーバーで使用できます。

そして、その値を増やしてもメモリ使用量には影響がないようです。

私たちも lua-resty に大きく依存していますが、それが SSL の処理方法に影響を与えることはないのでしょうか?

この高いメモリ使用量の原因は何であるかご存知ですか?

nginx バージョン: openresty/1.13.6.1

答え1

これは、nginx が各仮想サーバーの設定に個別のメモリを割り当てており、そのメモリ領域に使用されている証明書のコピーが含まれているために発生するものと思われます。つまり、個別の証明書が少数しかない場合でも、個別の仮想サーバーで使用されると、メモリ内で証明書が複製されることになります。

SSL セッション キャッシュには証明書データは含まれず、クライアントとサーバー間のアクティブな SSL セッションのセッション データのみが含まれます。

答え2

私たちは主に認証に Openresty を使用していました。Openresty がメモリ使用量の増加の原因であると疑っていたため、すべての lua 部分を抽出しました。これで、auth_request認証のために Openresty にプロキシする nginx ができました。

同じ数のホストと SSL 証明書で、メモリ使用量が大幅に削減されました (ワーカーあたり 6 GB ではなく約 150 MB)。また、openresty はごくわずかな量のメモリしか使用しません。そのため、構成の他の部分と組み合わせた openresty に何らかの問題があったようです。

これは元の質問に正確に答えているわけではありませんが、私たちにとって、そしてこの問題に遭遇した他の人にとって、役立つ回避策となります。

関連情報