Nginx缓存详解(5大缓存配置及原理)

Nginx缓存详解(5大缓存配置及原理)-mikechen

nginx缓存简介

Nginx 是一款高性能的开源反向代理服务器和 Web 服务器,它提供了强大的缓存功能,用于提高网站性能和降低服务器负载。

 

nginx缓存配置

1.缓存的开启与关闭

location / {
    proxy_pass http://backend_server;
    proxy_cache my_cache;
    proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;
    proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
}

使用 proxy_cache 开启缓存,使用 proxy_no_cache 和 proxy_cache_bypass 关闭缓存。

 

2.缓存路径配置

在 Nginx 配置文件中,需要配置代理缓存路径,即定义缓存存储的位置。

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m;

参数:

  • levels: 定义缓存目录的层次结构。
  • keys_zone: 缓存索引的内存区域,用于存储缓存键和元数据。
  • max_size: 缓存最大占用的磁盘空间。
  • inactive: 缓存项在多长时间内没有被访问时被认为是不活跃的。

 

3.缓存配置

location / {
    proxy_pass http://backend_server;
    proxy_cache my_cache;
    proxy_cache_valid 200 302 10m;
    proxy_cache_valid 404 1m;
    expires 10m;
}

参数:

  • proxy_cache: 指定使用的缓存区域。
  • proxy_cache_valid: 定义缓存项对于不同的响应状态码的有效期。
  • expires: 定义缓存的过期时间。

 

4.缓存清理

location ~ /purge(/.*) {
    allow 127.0.0.1;
    deny all;
    proxy_cache_purge my_cache $1;
}

使用 proxy_cache_purge 模块实现缓存清理,即刷新缓存项。

 

5.缓存监控与统计

使用 ngx_http_stub_status_module 模块可以监控和统计缓存的使用情况。

location /nginx_status {
    stub_status on;
    access_log off;
    allow 127.0.0.1;
    deny all;
}

 

nginx缓存原理

当有一个请求到达 Nginx,Nginx 会首先检查缓存,使用 proxy_cache_key 生成缓存键,然后查找缓存区域中是否有与该键对应的缓存项。

如果缓存中存在有效的缓存项,Nginx 直接返回缓存的响应给客户端,无需访问后端服务器。

如果缓存中不存在有效的缓存项,Nginx 将请求发送到后端服务器,获取响应数据,并将该数据存储到缓存中,同时使用 proxy_cache_valid 设置缓存项的有效期。

下一次相同的请求到达时,如果缓存项仍然有效,Nginx 将直接返回缓存的响应,否则,将重复上述的获取和缓存的过程。

 

nginx缓存注意

小心处理缓存一致性问题,尤其在有写操作的场景中。

调整缓存的有效期和清理机制,避免缓存雪崩和缓存过期导致的性能问题。

根据实际需求选择合适的缓存键的生成规则,确保缓存项的唯一性和正确性。

mikechen

mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复架构即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法