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

Vij*_*dra 11 nginx cache memcache

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

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

ab -c 500 -n 1000 http://localhost/banner.jpg
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

socket: Too many open files (24)
Run Code Online (Sandbox Code Playgroud)

我想这意味着 Nginx 试图从磁盘同时打开太多文件,而操作系统不允许此操作。任何人都可以建议我正确的配置吗?

c2h*_*5oh 9

如果它是静态内容,则默认情况下它将缓存在内存中(除非没有任何内存),只是不是由 nginx 缓存,而是由操作系统缓存 - 所有留在磁盘端的将是 stat()。

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


小智 9

一旦服务器从磁盘读取文件,它就会被缓存到ram(如果你没有ram,将被不同的文件替换),问题是你的帐户限制,你不能打开这么多文件(运行'ulimit -a'),

如果你想改变这个限制 - 阅读 /etc/security/limits.conf

  • “我不想改变我的打开文件限制”——你做错了。哦,非常非常错误。 (4认同)
  • @womble 我知道要解决这个问题,最简单的解决方案是更改限制。我不想更改此限制的原因是看看我可以在不更改限制的情况下对配置做的最好的事情。我认为我可以通过更改缓存和配置的其他一些方面来改进。顺便说一句,你能不能在声称某人错了的时候给你理由/建议。即使在您的第一条评论中,您也没有给出任何理由就这样做了。这是一个提供专业建议的地方,请不要把它当作你的脸书墙。 (4认同)

Ben*_*ker 7

所以我知道这真的很旧,但是,这里是。

  1. Nginx 不会开箱即用地进行内存缓存,您需要为此查看 memcache,我会为此推荐 openresty 包:http://openresty.org/。你开箱即用的东西(如上面的回答是页面缓存)
  2. 我几乎可以肯定,该错误消息来自 ab 而不是来自 nginx,文件限制的 nginx 错误看起来像“失败(24:打开的文件太多)”。请记住,在 unix 套接字中也是文件,因此对于您运行 ab 的用户,需要为该会话调整其 ulimit 以运行 ab。因为你说你的限制是 256,你要求 ab 使用 500 个连接,这就是你的限制。