Nginx 缓存的工作原理

天翼云开发者社区
• 阅读 7

本文分享自天翼云开发者社区《Nginx 缓存的工作原理》.作者:云海

Nginx 缓存的工作原理

Nginx 缓存分为多种类型,最常见的是代理缓存(Proxy Cache)。

1. 代理缓存(Proxy Cache)

代理缓存的核心原理是: 当客户端请求到达 Nginx 时,Nginx 会检查缓存中是否存在匹配的内容。如果存在,直接返回缓存内容;如果不存在,则向后端请求数据,并将响应结果存储到缓存中,供后续请求使用。

缓存文件的存储结构 Nginx 将缓存内容存储在磁盘中,使用了分层目录结构。例如:

/var/cache/nginx/
├── 1
│   ├── 2
│   │   ├── abc12345.cache

缓存文件名通常是根据请求 URL 计算的哈希值生成的,避免冲突。

缓存控制 Nginx 使用 Cache-Control 和 Expires 等 HTTP 头部字段来决定缓存的有效性。如果后端响应中包含 Cache-Control: no-cache 或 Cache-Control: max-age=0,则不会将内容缓存。

Nginx 缓存配置示例

以下是一个完整的代理缓存配置示例:

http {
    # 定义缓存路径
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

    server {
        listen 80;

        # 启用代理缓存
        location / {
            proxy_cache my_cache;                 # 使用名为 my_cache 的缓存区域
            proxy_pass $scheme://backend_server;     # 转发到后端服务器
            proxy_cache_valid 200 302 10m;       # 对 200 和 302 响应缓存 10 分钟
            proxy_cache_valid 404 1m;            # 对 404 响应缓存 1 分钟
            proxy_cache_use_stale error timeout; # 后端不可用时使用过期缓存
        }
    }
}

配置说明

  • proxy_cache_path:定义缓存目录、大小、过期时间等参数。
  • proxy_cache:启用缓存并指定缓存区域。
  • proxy_cache_valid:定义不同状态码的缓存时间。
  • proxy_cache_use_stale:指定在后端出错时是否使用过期缓存。

    Nginx 缓存优化建议

  1. 合理规划缓存策略 针对静态文件设置较长的缓存时间(如数天或数周)。 动态内容可根据业务需求设置较短的缓存时间(如几分钟)。
  2. 优化缓存目录 将缓存目录存储在高速磁盘(如 SSD)上。 合理设置缓存目录的层级(如 levels=1:2),避免单个目录下的文件过多。
  3. 结合外部缓存系统 对于分布式部署的场景,可以结合 Redis 或 Memcached 等外部缓存系统,保证数据一致性。

    Nginx 缓存的优势与限制

优势 高效:Nginx 通过事件驱动模型实现了高性能缓存管理。 灵活:支持多种缓存策略,适应不同的业务需求。 易用:通过简单的配置即可实现强大的缓存功能。 限制 磁盘 IO 受限:缓存文件存储在磁盘上,高并发场景可能受到磁盘性能瓶颈的限制。 缺乏缓存失效通知:当后端数据更新时,Nginx 无法主动清除对应的缓存内容。 复杂的缓存规则:在复杂场景下,需要手动配置缓存规则,容易出错。

总结

Nginx 的缓存服务是其性能优化的核心功能之一,通过合理配置缓存,可以显著提高网站的响应速度,降低后端服务器压力。掌握缓存的工作原理、配置方法以及优化技巧,将使您在处理高并发、高流量的 Web 服务时游刃有余。

点赞
收藏
评论区
推荐文章
Stella981 Stella981
4年前
Nginx事件管理之定时器事件
1\.缓存时间1.1管理Nginx中的每个进程都会单独地管理当前时间。ngx\_time\_t结构体是缓存时间变量的类型:typedefstruct{/格林威治时间1970年1月1日凌晨0点0分0秒到当前时间的秒数/time_tsec;
Stella981 Stella981
4年前
Keepalived+LVS+nginx搭建nginx高可用集群
       nginx是一款非常优秀的反向代理工具,支持请求分发,负载均衡,以及缓存等等非常实用的功能。在请求处理上,nginx采用的是epoll模型,这是一种基于事件监听的模型,因而其具备非常高效的请求处理效率,单机并发能力能够达到上百万。nginx接收到的请求可以通过负载均衡策略分发到其下一级的应用服务器,这些服务器一般是以集群方式部署的,因而在性能不
Stella981 Stella981
4年前
Nginx入门
课程概览Nginx是一个开源的HTTP和反向代理服务器,同时也可以用于邮件代理服务器、负载均衡以及HTTP缓存。Nginx项目在一开始时,就定位于高并发、高性能以及低内存消耗的目标。它可以运行在Linux,,各类BSD系统,MacOSX,Solaris,AIX,HPUX以及各类\nix操作系统。此外,它也提供了一个Windows
Stella981 Stella981
4年前
Nginx 反向代理可以缓存 HTTP POST 请求页面吗?
Nginx反向代理可以缓存HTTPPOST请求页面吗? 20170905 景峯本文节选自《NetkillerWeb手札》作者:netkiller网站:http://www.netkiller.cn答案是可以! 因为nginx使用url作为缓存的key
Stella981 Stella981
4年前
Nginx页面图片错误 ERR_CONTENT_LENGTH_MISMATCH
现场:nginx代理的网站有的虚拟目录的图片无法正常显示,提示 ERR\_CONTENT\_LENGTH\_MISMATCH,不断刷新页面图片一条一条的显示出来。解决方法:找到nginx的缓存文件目录,chown为www查看nginx相关进程发起者:!(https://oscimg.oschina.net/oscnet/ae47bc23a54
Stella981 Stella981
4年前
Linux玩转redis从入门到放肆
1\.缓存穿透在大多数互联网应用中,缓存的使用方式如下图所示:!(https://oscimg.oschina.net/oscnet/6a12e0fbee579fa624b2ea1738e89278c3f.png)1.当业务系统发起某一个查询请求时,首先判断缓存中是否有该数据;2.如果缓存中存在,则直接返回数据;3.如果缓存中
Wesley13 Wesley13
4年前
.NET中的本地缓存(数据分拆+lock锁)
本章将和大家分享.NET中的本地缓存。本章将和大家分享如何使用数据分拆lock锁的方式来实现本地缓存。系统性能优化的第一步,就是使用缓存。缓存包括:客户端缓存CDN缓存反向代理缓存本地缓存。!(https://static.oschina.net/uploads/img/202009/27220009_a8gt.png)
Stella981 Stella981
4年前
SDWebImage 实现原理及大致介绍
一、SDWebImage实现原理:1.首先让占位图先显示。2.SDWebImageManage交给SDImageCache先从内存中查找是否有图片,会以URL作为数据的索引在内存中查找是否有对应的缓存。3.如果有缓存,通过代理进行回调展示图片。4.如果内存缓存中没有找到,生成NSInvocati
Nginx的ngx_thread_pool模块解析:提升性能与可伸缩性
本文分享自天翼云开发者社区《》.作者:云海Nginx是一个备受欢迎的开源Web服务器和反向代理服务器,以其出色的性能和可伸缩性而著称。在处理高并发请求时,Nginx的ngxthreadpool模块发挥了关键作用,允许您有效地利用多核CPU,提高并发处理性能
nginx证书缓存功能
本文分享自天翼云开发者社区《》.作者:云海背景:ssl证书之前是不支持公用的,不同的域名,如果引用同一本证书,是无法公用的,每个域名都要加载同一个证书,浪费内存新版本:在1.27.2版本中,nginx官方更新了ssl证书相关的实现,支持了ssl证书缓存共享
天翼云开发者社区
天翼云开发者社区
Lv1
天翼云是中国电信倾力打造的云服务品牌,致力于成为领先的云计算服务提供商。提供云主机、CDN、云电脑、大数据及AI等全线产品和场景化解决方案。
文章
945
粉丝
16
获赞
40