如何配置 nginx 以从 RAM 提供静态内容?

如何配置 nginx 以从 RAM 提供静态内容?

我想将 Nginx 设置为我的 Web 服务器。我想将图像文件缓存在内存 (RAM) 中,而不是磁盘中。我正在提供一个小页面,并希望一些图像始终从 RAM 中提供。我不想为此使用 Varnish(或任何其他此类工具),因为我相信 Nginx 有能力将内容缓存到 RAM 中。我不确定如何为此配置 Nginx?我尝试了几种组合,但没有成功。Nginx 始终使用磁盘来获取图像。

例如,当我尝试使用以下命令进行 Apache 基准测试时:

ab -c 500 -n 1000 http://localhost/banner.jpg

我收到以下错误:

socket: Too many open files (24)

我猜这意味着 Nginx 试图同时从磁盘打开太多文件,而操作系统不允许此操作。有人能建议我一个正确的配置吗?

答案1

如果它是静态内容,那么它将默认被缓存在内存中(除非没有剩余内存),但不是由 nginx 缓存,而是由操作系统缓存 - 磁盘端剩下的只有 stat()。

如果您想要 100% 内存解决方案,您只需配置 ramdisk 并从那里提供数据。

答案2

一旦服务器从磁盘读取了一个文件,它将被缓存到内存中(如果内存不足,它将被不同的文件替换),问题在于你的账户限制,你不能打开那么多文件(运行'ulimit -a'),

如果您想更改此限制 - 请阅读 /etc/security/limits.conf

答案3

所以我知道这确实很老了,但是,还是继续吧。

  1. Nginx 不提供开箱即用的内存缓存,您需要查看 memcache,我推荐使用 openresty 包:http://openresty.org/。您获得的开箱即用功能(如上文所述,是页面缓存)
  2. 我几乎可以肯定,该错误消息来自 ab,而不是来自 nginx,nginx 的文件限制错误如下所示:“失败(24:打开的文件太多)”。请记住,在 unix 套接字中也是文件,因此对于您以该身份运行 ab 的用户,需要调整其 ulimit 以适应该会话才能运行 ab。由于您说您的限制是 256,因此您要求 ab 使用 500 个连接,这超出了您的限制。

答案4

默认情况下,nginx 使用文件系统来存储其缓存。

您可以将 nginx 缓存与 tmpfs 一起使用(即创建一个内存支持的文件系统),以便使用内存作为缓存存储

请查看此处以了解更多信息:

https://wtit.com/blog/2022/09/27/nginx-caching/

相关内容