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://idctop.com/article/477928.html

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

相关推荐

  • linux导航怎么破解?linux破解软件推荐

    Linux系统本身不存在所谓的“导航破解”概念,因为Linux是开源免费操作系统,其内核及主流发行版(如Ubuntu、CentOS)均遵循GPL等开源协议,无需也不存在商业破解行为;若涉及特定商业软件或专有导航算法的非法修改,则属于侵犯知识产权的违法行为,Linux开源生态与版权合规性解析在讨论技术操作之前,必……

    2026年7月8日
    8300
  • 我的世界ice服务器被炸到底要赔多少钱,怎么处理

    我的世界ICE服务器被炸后的赔偿金额取决于服务器硬件配置、数据损失价值、业务中断时长以及是否购买保险,通常从几千元到数十万元不等,赔偿金额如何计算ICE服务器被炸,损失不是一句话能算清的,很多人以为只赔个服务器钱,实际上数据、业务、甚至法律成本都算在内,下面拆开看,硬件损失服务器硬件是硬成本,一台ICE服务器……

    2026年8月8日
    1100
  • 32核64G服务器能带多少人同时在线,性价比高不高?

    32核64G服务器适合支撑200-500人同时在线的高并发业务,日均请求量可覆盖10万-30万次,具体取决于业务类型和架构优化水平,如果你正在纠结租用还是一台服务器该选什么配置,32核64G(vCPU 32核、内存64GB)是目前云计算市场上最热门的“中大型企业标配”,它卡在了一个奇妙的位置:比上不足(相比96……

    2026年8月21日
    300
  • Linux服务器登录密码是多少位?密码长度规则是什么?

    Linux服务器登录密码无法直接查看明文,但可以通过查看密码策略参数确定系统要求的最小位数,并通过重置密码的方式主动设置和确认位数,在日常运维中,很多朋友刚接触Linux服务器时会问“密码到底是几位”,这背后往往是对系统安全策略的不熟悉,今天这篇内容就围绕这个问题,带你用命令行工具逐层拆解,顺带聊聊服务器密码管……

    2026年8月22日
    200
  • 四川达州广电DNS服务器地址是多少,怎么设置

    四川达州广电网络主用DNS服务器地址为61.188.185.40,备用地址为61.188.185.41,这两个地址属于四川广电本地节点,适用于达州地区广电宽带用户,若遇到网页加载慢或部分网站打不开,可优先尝试手动指定这两个地址,下面拆解DNS的作用、设置方法及优化方案,并引入专业IDC服务商数据供参考,四川达州……

    2026年8月8日
    400
  • 海康终端服务器ds-tp50多少钱,值得买吗

    海康终端服务器ds-tp50的单价并非固定值,其基础款裸机市场参考价通常在1.5万元至2万元区间,但具体成交价会因内存、硬盘、操作系统及是否含增值税发票等因素浮动,最终落地价格需结合配置和采购渠道确认,影响海康ds-tp50价格的核心因素咱们先把账算明白,为什么一台服务器价格能差出好几千块,海康威视的ds-tp……

    2026年8月21日
    300
  • 一台服务器实际功率多少千瓦,服务器功率怎么算最准确?

    一台服务器满载时的功耗通常在0.1千瓦到2千瓦之间,具体数值取决于CPU型号、内存容量、硬盘数量及负载情况, 这个范围覆盖了从塔式低功耗服务器到高密度计算节点的绝大多数场景,但实际部署时还需考虑电源转换效率、散热需求以及底层硬件的使用率,理解这个数字背后的逻辑,能帮你更精准地规划IT预算和托管方案,服务器功耗的……

    2026年8月13日
    1400
  • 黑苹果在Linux下怎么装?黑苹果安装教程

    在Linux系统上运行macOS(黑苹果)在2026年已不再是极客的专属玩具,而是通过OpenCore引导器和现代硬件适配,成为开发者测试Apple生态应用、享受Unix底层稳定性的务实选择,但需接受驱动兼容性有限和系统更新风险,黑苹果(Hackintosh)的本质是在非Apple硬件上安装macOS,对于Li……

    2026年7月7日
    12100
  • linux磁盘由什么组成?linux磁盘组成结构详解

    Linux磁盘并非单一硬件,而是由物理块设备、分区表、文件系统内核模块及挂载点共同构成的层级化存储体系,理解其“物理-逻辑-挂载”三层结构是掌握Linux存储管理的核心,在Windows系统中,用户习惯直接操作C盘、D盘,但在Linux世界里,一切皆文件,存储结构更为严谨且分层清晰,许多初学者常被/dev/sd……

    2026年7月6日
    9100
  • 简米云5M服务器到底支持多少人在线,怎么测试?

    阿里云5M带宽服务器,在典型网页应用场景下,大约可支撑100-200人同时在线,但实际承载量受页面大小、用户行为、服务器配置等多重因素影响,5M带宽的真实含义5M带宽指服务器出口带宽为5Mbps,即每秒最大传输5120Kb,换算成字节为640KB,这意味着,如果所有用户同时请求数据,服务器每秒最多能发送640K……

    2026年8月7日
    300

发表回复

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