我在Docker容器中运行Nginx,它提供一些静态文件。这些文件将从不在运行时更改 - 如果它们确实发生了更改,则将停止容器,重建映像,并启动新容器。
因此,为了提高性能,如果Nginx只从磁盘读取静态文件一次,然后永久地从内存中将其服务,那将是完美的。我找到了一些配置选项来配置缓存,但至少从我所看到的,他们都没有提供我正在寻找的“永远”行为。
这有可能吗?如果是这样,我如何配置Nginx来实现这一目标呢?
答案 0 :(得分:4)
操作系统默认在内存缓存中执行。它被称为page cache。此外,您可以启用sendfile以避免在内核空间和用户空间之间复制数据。
答案 1 :(得分:3)
作为HTTP服务器的Nginx无法对静态文件或页面进行内存缓存。
Nginx是功能强大且成熟的HTTP和代理服务器。但是关于缓存的功能似乎有些混乱。作为纯Web服务器运行时,Nginx服务器无法对文件进行内存缓存。然后……等什么!?让我改一下:Nginx HTTP服务器无法内存缓存文件或页面。
可能的解决方法
Nginx社区的答案是:没问题,让操作系统为您做内存缓存!操作系统是由聪明人编写的(true),知道什么,何时,何地以及如何做。缓存(仅是一种意见)。因此,他们说,定期将您的静态文件保存到/ dev / null,然后信任它可以为您缓存内容!对于那些想知道和思考的人,cat / dev / null引用与缓存有什么关系?继续阅读以了解更多信息(提示:不要这样做!)。
它如何工作?
事实证明,Linux是一种微调的野兽,它对缓存中的内容进出视而不见。那个缓存东西叫做页面缓存。页面缓存是内存存储区,经常访问的文件被部分或全部存储在其中,以便可以快速访问它们。内核负责跟踪缓存在内存中,何时需要更新或何时需要驱逐的文件。可用的可用内存越多,页面缓存越大,缓存就“越好”。
请参考下图以获得更多深度说明:
参考和进一步阅读-HERE