[nginx]proxy_cache缓存系统

简介: [nginx]proxy_cache缓存系统

前言

proxy_cache是nginx内置的一个缓存系统,可实现减小后端负载的作用。

常用参数说明

参数 说明
proxy_cache_path 缓存文件路径。level表示目录层级,1:2表示两个子目录。keys_zone指定缓存区名称和大小。inactive表示缓存有效期。max_size表示硬盘中缓存的大小。use_temp_path为off时表示缓存文件直接写到cache中而不使用temp_path,避免文件拷贝导致影响性能。
proxy_cache 启用缓存并指定缓存区域
proxy_cache_valid 根据状态码来定义缓存的有效期
proxy_cache_min_uses 被访问多少次后才缓存,默认为1
proxy_cache_methods 指定可以被缓存的请求方法,默认值为 GET HEAD
proxy_cache_convert_head 如果设置为 on 表示允许将请求的 HEAD 方法改成 GET 方法进行缓存;如果设置为 off,则缓存的 key 需要加上$request_method,即$host$request_uri$request_method
proxy_cache_key 设置缓存的 key,默认 key 是完整的 URL
proxy_cache_background_update 允许后台启动一个子请求去更新过期的缓存数据,并提供一个过期的缓存数据响应给客户端,前提是 proxy_cache_use_stale 的配置中包含 updating
proxy_cache_use_stale 允许在某种条件下返回请求时使用过期的缓存数据
proxy_cache_lock 多条相同url请求未命中缓存时,nginx只发送一条请求到后端
proxy_cache_lock_timeout 缓存未命中等待超时后,所有未命中的url请求都会转到后端
proxy_ignore_headers 即便有指定的响应头操作,依然使用缓存

配置示例

http {
  # 设置缓存路径、目录层级(1:2 表示两个子目录)、内存zone的名字和内存大小
  # 缓存有效时间、硬盘最大存储大小、缓存文件直接写到cache文件中而不使用temp_path
  proxy_cache_path /home/apps/nginx/cache levels=1:2 keys_zone=ngxcache:100m inactive=7d max_size=1g use_temp_path=off;
  
  server {
    ...
    
    proxy_cache ngxcache;
    proxy_cache_valid 200 304 5m;
    proxy_cache_valid 301 302 2m;
    proxy_cache_min_uses 1;
    # 添加一个响应头,用来标识请求是否命中缓存
    add_header N-Cache-Status $upstream_cache_status;
    proxy_cache_methods GET HEAD;
    proxy_cache_convert_head on;
    proxy_cache_key $scheme$host$uri$is_args$args;
    proxy_cache_background_update on;
    # 允许在某种条件下返回请求时使用过期的缓存数据
    proxy_cache_use_stale error timeout invalid_header updating http_502 http_503 http_504;
    proxy_cache_lock on;
    proxy_cache_lock_timeout 10;
    # 即便有Vary、Set-Cookie的响应头操作,依然使用缓存
    proxy_ignore_headers Vary Set-Cookie;
    
    proxy_pass http://backend;
  }
}
相关文章
|
24天前
|
缓存 应用服务中间件 nginx
成功解决 Nginx更新静态资源无效 ,Nginx静态资源更新不及时,Nginx清除缓存
这篇文章讨论了在使用Nginx进行动静分离时遇到的静态资源更新不及时的问题。问题描述了在服务器上更新静态资源后,访问页面时页面没有显示更新的情况。文章提供了解决这个问题的方法,即清除浏览器缓存,并提供了相关参考文章链接。此外,还展示了问题复现的步骤和正常情况的预期结果。
成功解决 Nginx更新静态资源无效 ,Nginx静态资源更新不及时,Nginx清除缓存
|
18天前
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
|
16天前
|
缓存 架构师 数据库
缓存系统稳定性 - 架构师峰会演讲实录
缓存系统稳定性 - 架构师峰会演讲实录
|
2月前
|
存储 缓存 前端开发
(三)Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化...想要的这都有!
早期的业务都是基于单体节点部署,由于前期访问流量不大,因此单体结构也可满足需求,但随着业务增长,流量也越来越大,那么最终单台服务器受到的访问压力也会逐步增高。时间一长,单台服务器性能无法跟上业务增长,就会造成线上频繁宕机的现象发生,最终导致系统瘫痪无法继续处理用户的请求。
|
2月前
|
监控 应用服务中间件 nginx
高并发架构设计三大利器:缓存、限流和降级问题之Nginx的并发连接数计数的问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之Nginx的并发连接数计数的问题如何解决
|
2月前
|
应用服务中间件 nginx 缓存
高并发架构设计三大利器:缓存、限流和降级问题之Nginx作为前置网关进行限流问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之Nginx作为前置网关进行限流问题如何解决
|
2月前
|
存储 缓存 NoSQL
深入理解分布式缓存在后端系统中的应用与实践
【7月更文挑战第20天】 本文将探讨分布式缓存技术在后端系统设计中的关键角色,并揭示其如何优化性能和扩展性。文章不仅剖析了分布式缓存的基本原理和工作机制,而且提供了实际案例分析,展示了其在处理大规模数据时的优势。我们将深入了解几种流行的分布式缓存解决方案,并讨论它们在不同场景下的适用性。最后,文章将指导读者如何在真实世界的应用中实施分布式缓存,包括架构设计、性能调优以及故障排除的最佳实践。
|
2月前
|
存储 缓存 NoSQL
深入理解分布式缓存在现代后端系统中的应用与挑战
随着互联网技术的飞速发展,分布式缓存已成为提升后端系统性能的关键技术之一。本文将从数据导向和科学严谨的角度出发,探讨分布式缓存技术的原理、应用场景以及面临的主要挑战。通过对具体案例的分析和数据统计,我们旨在为读者提供一个全面而深入的理解框架,帮助开发者更好地设计和优化后端系统。 【7月更文挑战第20天】
57 0
|
2月前
|
设计模式 存储 缓存
Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
39 0
|
2月前
|
设计模式 存储 缓存
Java面试题:结合单例模式与Java内存模型,设计一个线程安全的单例类?使用内存屏障与Java并发工具类,实现一个高效的并发缓存系统?结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:结合单例模式与Java内存模型,设计一个线程安全的单例类?使用内存屏障与Java并发工具类,实现一个高效的并发缓存系统?结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
24 0