linux nginx缓存怎么设置?linux nginx配置缓存目录

在 Linux 环境下,Nginx 的缓存功能主要涉及两个层面:反向代理缓存(Proxy Cache)静态文件缓存(FastCGI/Static Cache),最常用的是 反向代理缓存,它可以将后端服务器(如 Apache、Tomcat、Node.js 等)返回的内容缓存到本地磁盘或内存中,从而减轻后端压力并提升访问速度。

以下是关于 Nginx 缓存的详细配置指南、关键指令说明及最佳实践。

33.Nginx-Nginx的缓存机制
加载中
33.Nginx-Nginx的缓存机制

核心配置示例

nginx.conf 或对应的 server/location 块中添加以下配置:

http {
    # 1. 定义缓存区域
    # proxy_cache_path: 缓存路径
    # levels: 缓存目录层级结构 (1:2 表示两级目录,帮助分散文件数量)
    # keys_zone: 内存中存储缓存键和元数据的区域大小
    # max_size: 磁盘上缓存的最大容量
    # inactive: 非活动多久后删除缓存 (默认 10 分钟)
    # use_temp_path: 是否使用临时路径 (建议设为 off,避免跨文件系统移动文件的开销)
    proxy_cache_path /var/cache/nginx/proxy levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
    server {
        listen 80;
        server_name example.com;
        location / {
            # 2. 启用缓存
            proxy_cache my_cache;
            # 3. 定义哪些状态码可以缓存 (默认只缓存 200, 301, 302)
            proxy_cache_valid 200 302 10m;
            proxy_cache_valid 301 1h;
            proxy_cache_valid any 1m;
            # 4. 设置缓存键 (默认使用 $scheme + $proxy_host + $request_uri)
            # URL 中有查询参数且不影响内容,可忽略
            proxy_cache_key "$scheme$request_method$host$request_uri";
            # 5. 设置后端服务器
            proxy_pass http://backend_servers;
            # 6. 处理缓存未命中或过期的行为
            # add_header X-Cache-Status $upstream_cache_status; # 调试用,显示 HIT/MISS/BYPASS/EXPIRED
        }
    }
}

关键指令详解

linux nginx缓存怎么设置?linux nginx配置缓存目录

proxy_cache_path

  • 路径:必须存在且 Nginx 进程用户(通常是 nginxwww-data)有写权限。
  • keys_zone:内存区域,用于存储缓存键和元数据。1MB 内存可存储约 8000 个键
  • max_size:磁盘缓存上限,当超出时,Nginx 会删除最少使用的文件。
  • inactive:非活动超时时间,如果缓存文件在此时间内未被访问,将被删除,注意:这与 proxy_cache_valid 不同,inactive 是基于访问时间,而 valid 是基于生成时间

proxy_cache_valid

  • 定义不同 HTTP 状态码的缓存有效期。
  • 示例:proxy_cache_valid 200 302 10m; 表示 200 和 302 状态码的内容缓存 10 分钟。
  • any 表示其他所有状态码。

proxy_cache_key

  • 决定缓存的唯一标识。
  • 常见变量:
    • $scheme:http 或 https
    • $host:主机名
    • $request_uri:完整 URI(包括查询参数)
    • $cookie_sessionid:如果用户登录状态影响内容,可加入 cookie 键。
  • 注意:URL 查询参数不影响内容(如 ?sort=asc?sort=desc 返回相同内容),应清理 URI 或使用自定义逻辑。

proxy_cache_bypassproxy_no_cache

  • proxy_cache_bypass:如果表达式为真,则不从缓存获取,而是直接向后端请求,但不存储新结果到缓存。
    proxy_cache_bypass $http_cache_control;
  • proxy_no_cache:如果表达式为真,则不存储结果到缓存,但仍向后端请求

    linux nginx缓存怎么设置?linux nginx配置缓存目录

    proxy_no_cache $http_pragma $http_authorization;

add_header X-Cache-Status

  • 用于调试,返回缓存状态:
    • HIT:缓存命中
    • MISS:缓存未命中,从后端获取
    • BYPASS:绕过缓存
    • EXPIRED:缓存已过期,从后端刷新

高级技巧与最佳实践

清除特定缓存

Nginx 本身没有内置的“删除单个文件”命令,但可以通过以下方式实现:

  • 方案 A:重命名文件(推荐)
    mv /var/cache/nginx/proxy/1/23/456789012345678901234567890123 /var/cache/nginx/proxy/1/23/456789012345678901234567890123.bak

    Nginx 会自动删除 .bak 文件(如果配置了 use_temp_path=off 则不会自动删除,需手动清理)。

  • 方案 B:使用第三方模块
    nginx-cache-purge 模块,可通过 URL 清除缓存:

    location /purge/ {
        allow 127.0.0.1;
        deny all;
        proxy_cache_purge my_cache "$scheme$request_method$host$request_uri";
    }
  • 方案 C:应用层清除
    在后端代码中,当内容更新时,通过 HTTP 头或 API 通知 Nginx 清除缓存(需配合 proxy_cache_purge 或脚本)。

缓存动态内容

  • 对于 API 或动态页面,确保 proxy_cache_key 包含足够的标识(如用户 ID、Cookie),避免不同用户看到相同内容。
  • 使用 proxy_cache_min_uses:只有当某个 URI 被请求超过 N 次后才缓存,避免频繁访问的页面被缓存。
    proxy_cache_min_uses 5;

处理浏览器缓存

Nginx 缓存是服务器端缓存,还需配合浏览器缓存:

location ~ .(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 30d;
    add_header Cache-Control "public, immutable";
}

linux nginx缓存怎么设置?linux nginx配置缓存目录

监控缓存命中率

  • 查看日志中的 X-Cache-Status 头。
  • 使用 nginx_status 模块监控缓存大小和命中率。
  • 定期检查 /var/cache/nginx/ 目录大小,确保未超出 max_size

缓存压缩

  • 启用 gzip 可减少传输数据量,但会增加 CPU 开销。
  • 缓存压缩后的内容需设置 proxy_cache_key 包含 $gzip 变量,否则未启用 gzip 的请求会获取到压缩内容导致乱码。
    proxy_cache_key "$scheme$request_method$host$request_uri$is_args$args$gzip";

常见问题排查

问题 可能原因 解决方案
缓存未生效 proxy_cache_key 包含动态参数(如时间戳) 清理 URI 或使用 proxy_cache_bypass
缓存不更新 proxy_cache_valid 时间过长 缩短 valid 时间或使用 proxy_cache_purge
缓存目录权限错误 Nginx 用户无写权限 修改 /var/cache/nginx 所有权:chown -R nginx:nginx /var/cache/nginx
缓存文件过大 max_size 设置过大或 inactive 过短 调整 max_sizeinactive 参数
后端返回 502/504 缓存路径磁盘满 清理缓存或增加 max_size

Nginx 缓存是提升 Web 性能的关键手段,合理配置 proxy_cache_pathproxy_cache_validproxy_cache_key 可以显著降低后端负载,对于动态内容,需谨慎处理缓存键和清除策略,建议在生产环境中启用 X-Cache-Status 头进行监控,并根据实际流量调整缓存参数。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://test.idctop.com/article/477928.html

(0)
Excel选定筛选怎么操作?excel筛选指定区域
上一篇 2026年7月10日 03:48
cdn带宽计费怎么算,cdn带宽计费
下一篇 2026年7月10日 03:50

相关推荐

  • 服务器内存条单条最大多少GB,多大容量才够用?

    服务器内存条单条最大容量目前为256GB(3DS LRDIMM),但市场上主流可稳定采购的单条容量为128GB(DDR4/DDR5),这个上限由JEDEC(固态技术协会)标准、CPU内存控制器、主板布线与插槽物理规格共同决定,并非单纯由内存颗粒技术垄断,接下来从行业标准、平台差异、采购实操三个层面拆解,单条容量……

    2026年8月20日
    600
  • iWebFusion高配服务器值得买吗,洛杉矶服务器租用推荐

    iWebFusion高配服务器以每月168美元的价格,提供双路E5-2697v3处理器、256GB内存及1TB NVMe硬盘,是预算有限但追求极致性价比的建站与开发者的理想选择,在云计算服务日益同质化的今天,寻找一款既具备高性能硬件支撑,又能在价格上保持竞争力的服务器产品并非易事,对于许多中小型企业、独立开发者……

    2026年7月6日
    15100
  • 4核8g5m服务器多少钱一个月?,性能怎么样?

    4核8g5m服务器一个月的费用通常在200元到500元之间,具体取决于云厂商、购买时长和活动折扣,年付均价可以降到150元/月左右,4核8g5m服务器多少钱一个月?价格差异从哪来同样是4核8g5m配置,不同平台给的价格可能差出一倍,这背后有几个关键因素,云服务器的定价不是简单按CPU和内存叠加,而是由计费模式……

    2026年7月22日
    1500
  • 1核1g1m服务器能支持多少人访问,够用吗?

    1核1G1M服务器通常能支撑日均500到2000次页面访问,如果网站经过静态缓存、CDN加速和代码优化,这个数字可以翻倍,具体能跑多少流量,取决于你的业务类型和优化程度,而不是简单的数字游戏,理解1核1G1M的真实承载逻辑很多人低估了这台小配置的潜力,也高估了它的能力,1核CPU擅长顺序计算,不适合高并发线程并……

    2026年8月5日
    300
  • AI服务运维开发怎么做?运维开发有哪些核心技能

    AI服务运维开发的核心在于构建自动化、可观测且具备自愈能力的闭环体系,通过DevOps与MLOps的深度融合,实现从模型训练到生产部署的全生命周期高效管理,在2026年的技术语境下,AI服务运维早已超越了传统的服务器监控范畴,它不再仅仅是“让服务不宕机”,而是关注“让模型持续产生价值”,随着大模型参数规模的指数……

    2026年6月11日
    4410
  • 安全重要短信怎么处理?如何避免重要需求遗漏

    避免重要需求遗漏的核心在于建立全生命周期的闭环管理机制,将短信需求从提出到上线纳入标准化流程,并通过技术手段与人工审核双重保障,关键在于打破信息孤岛,建立需求追踪系统,并强制执行关键节点确认,而非单纯依赖个人记忆或碎片化沟通,以下从流程、工具、团队协作三个维度展开具体解决方案,流程标准化:构建需求管理的闭环系统……

    2026年3月23日
    12100
  • linux shell sftp怎么用,常用命令有哪些?

    在Linux Shell环境下,SFTP是进行加密文件传输的核心工具,它直接借用SSH的安全通道,无需额外搭建服务器即可在保证数据机密性的同时完成上传、下载与管理操作,Linux Shell SFTP命令详解与实战掌握SFTP命令是Linux运维人员的基本功,这些命令与FTP类似,但底层加密机制完全不同,以下按……

    2026年7月14日
    900
  • 租一台200G服务器大概多少钱,哪家最便宜?

    租一台200G带宽的服务器,月付价格通常在3000元到15000元之间,具体取决于带宽独享比例、硬件配置和线路质量, 这个价格区间覆盖了从入门级应用到企业级核心业务的需求,实际成本需要结合业务场景详细评估,200G服务器租用价格解析价格构成:带宽、硬件与线路200G服务器通常指配备200Gbps带宽的物理服务器……

    2026年8月4日
    1100
  • Namecheap域名首年$0.98是真的吗?便宜域名注册平台推荐

    这确实是一个非常有吸引力的域名优惠价格!$0.98 的首年价格对于 .com 域名来说属于极低的市场促销价,通常用于吸引新用户或推广新注册商,在决定购买前,建议您注意以下几个关键点,以确保“物超所值”并避免后续隐藏成本:✅ 优点极致低价:首年仅需 $0.98,远低于市场均价(.com 首年在 $8–$15 之间……

    行业资讯 2026年7月10日
    8900
  • 公司服务器到底要开多少个HYPER-V,多少合适?

    不要问“该开多少个”,先分清楚哪些业务必须自建、哪些必须上云,多数公司真正需要的,是3到5台物理宿主机组成的Hyper-V集群 ,而不是一台满负荷运转的单机,先盘点再开虚拟机,避免一上来就“拍脑袋”很多运维拿到新服务器,习惯性先创建一堆虚拟机,系统装完就晾在那边吃灰,这种做法在2026年会导致明显的资源浪费和安……

    2026年8月22日
    200

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注