web-dev-qa-db-ja.com

Nginxのメモリに静的ファイルを永久にキャッシュしますか?

DockerコンテナでNginxを実行していて、いくつかの静的ファイルを提供しています。ファイルは決して実行時に変更されません-実際に変更された場合、コンテナは停止され、イメージが再構築され、新しいコンテナが開始されます。

したがって、パフォーマンスを向上させるには、Nginxが静的ファイルをディスクから1回だけ読み取り、それをメモリから永久にサーバー化するのが最適です。キャッシュを構成するためのいくつかの構成オプションを見つけましたが、少なくとも私が見たものからは、私が探しているこの「永遠の」動作を提供するものはありませんでした。

これは可能ですか?もしそうなら、これを達成するためにどのようにNginxを設定する必要がありますか?

13
Golo Roden

オペレーティングシステムは、デフォルトでメモリキャッシュを実行します。 ページキャッシュ と呼ばれます。さらに、 sendfile を有効にして、カーネルスペースとユーザースペースの間でデータがコピーされないようにすることができます。

7
VBart

HTTPサーバーとしてのNginxは、静的ファイルまたはページのメモリキャッシュを実行できません。

Nginxは、有能で成熟したHTTPおよびプロキシサーバーです。しかし、キャッシングに関するその機能については混乱があるようです。 Nginxサーバーは、純粋なWebサーバーとして実行している場合、ファイルをメモリキャッシュできません。そして…何を待つ!?言い換えると、NginxHTTPサーバーはファイルやページをメモリキャッシュできません。

考えられる回避策

Nginxコミュニティの答えは次のとおりです:問題ありません、OSにメモリキャッシュを実行させてください!OSは賢い人々(true)によって書かれ、何を知っていますか、いつ、どこで、どのようにキャッシュするか(単なる意見)。つまり、静的ファイルを定期的に/ dev/nullにキャットし、それを信頼して自分のものをキャッシュすると言います。疑問に思って熟考している人にとって、cat/dev/null参照はキャッシングと何の関係がありますか?詳細については、以下をお読みください(ヒント:実行しないでください!)。

どのように機能しますか?

Linuxは微調整された獣であり、キャッシュに出入りするものについては目が離せません。そのキャッシュはページキャッシュと呼ばれます。ページキャッシュは、頻繁にアクセスされるファイルが部分的または全体的に保存されるメモリストアであるため、すばやくアクセスできます。カーネルは、メモリにキャッシュされているファイルを、更新が必要なとき、または削除する必要があるときに追跡する責任があります。より多くの空きRAMが利用可能であるほど、ページキャッシュが大きくなるほど、キャッシュは「より良く」なります。

詳細な説明については、以下の図を参照してください。

enter image description here

参照と参考資料- [〜#〜] here [〜#〜]

6