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 进程用户(通常是 nginx 或 www-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_bypass 和 proxy_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_size 和 inactive 参数
后端返回 502/504 缓存路径磁盘满 清理缓存或增加 max_size

Nginx 缓存是提升 Web 性能的关键手段,合理配置 proxy_cache_path、proxy_cache_valid 和 proxy_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

相关推荐

  • Friendhosting KVM VPS 55折怎么抢,哪个大硬盘VPS性价比最高?

    Friendhosting 庆祝系统管理员日:全场 VPS 55折 狂欢开启!为了向全球默默守护网络稳定、支撑数字化世界的系统管理员(SysAdmins)致敬,Friendhosting 现推出年度重磅优惠活动,无论您是需要高性能计算的开发者,还是需要海量存储的数据备份者,本次活动都将为您提供极具性价比的选择……

    2026年7月14日
    700
  • rtp服务器一般使用的端口号是多少,怎么设置端口号?

    RTP服务器通常使用的端口号没有固定值,但最经典的组合是UDP端口5004(RTP)和5005(RTCP),实际生产环境中,基于RFC 3550标准,更常见的是采用16384到32767之间的动态端口范围,具体取决于应用场景和会话协商,RTP端口号的基础定义与标准RTP(实时传输协议)本身不强制绑定某个固定端口……

    2026年8月2日
    600
  • 安装顺序怎么排?顺序图绘制步骤详解

    安装顺序的核心在于“先硬后软、先底后表、先内后外”,遵循底层驱动优先于应用层、硬件基础稳固于软件配置的原则,可避免90%以上的兼容性与性能瓶颈,在数字化设备日益普及的今天,无论是组装一台高性能PC,还是部署一套企业级服务器,亦或是配置智能家居中枢,安装顺序往往被用户忽视,业内专家指出,错误的安装顺序不仅会导致系……

    2026年6月16日
    3400
  • 网件linux怎么装?网件路由器刷linux系统教程

    网件(Netgear)路由器虽以易用性著称,但其底层运行的是基于Linux内核的定制系统,通过SSH接入并启用高级功能,能显著提升网络性能与安全性,适合有一定技术基础的用户进行深度优化,许多用户认为路由器只是“插上就能用”的黑盒子,但实际上,网件的高端系列如Nighthawk(夜鹰)或Orbi系列,其固件底层均……

    2026年7月5日
    5200
  • Linux QML怎么入门?,有哪些教程

    在Linux系统上使用QML进行界面开发,能同时兼顾声明式语法的高迭代效率和底层硬件加速的流畅表现,这已成为嵌入式、车载及工业桌面应用的主流选择之一,linux qml开发环境搭建:从依赖安装到项目运行以Ubuntu 22.04 LTS为例,搭建可用的QML开发环境只需要几条命令再加一个示例文件,Qt 6是当前……

    2026年7月15日
    1400
  • 我的世界PC服务器真的能赚钱吗,怎么赚钱?

    我的世界PC服务器能赚钱,但收入取决于玩家规模、运营成本和变现模式,多数小服主月入几百到几千元,大服可能月入数万,我的世界服务器赚钱的底层逻辑收入来源:捐赠、赞助、商城、广告捐赠:玩家自愿打赏,常见于公益服,回馈游戏内称号或颜色,据统计,捐赠制服务器收入占比较小,但玩家忠诚度高,适合长期运营,商城:出售VIP……

    2026年8月20日
    600
  • 国外oss云存储怎么建立,新手如何快速搭建

    建立国外OSS云存储的核心在于选型、权限配置与安全策略的系统性规划,具体而言,国外oss云存储怎么建立并非单一操作,而是包含服务商选择、存储桶创建、访问控制列表(ACL)设置以及数据生命周期管理的一整套流程,这一过程要求开发者不仅要掌握基础的平台操作,还需深入理解数据冗余、加密传输及成本优化的专业逻辑,以确保构……

    2026年2月28日
    14300
  • 国外云主机需要备案吗,国外云主机备案流程是怎样的?

    国外云主机不受中国工信部ICP备案制度的强制约束,用户无需经过繁琐的审核流程即可上线网站,这为追求快速部署和面向海外用户的企业提供了极大的便利,但同时也意味着在中国大陆的访问速度和网络稳定性方面需要做出妥协,并需自行承担内容合规的主体责任,这一核心结论揭示了国外云主机备案(即免备案)的本质:它是基于服务器物理位……

    2026年2月24日
    13400
  • 一台2U服务器一个月耗电多少,一天多少度电

    一台2U服务器满载功耗通常在300W至500W之间,按工业电价0.8元/度计算,每月电费约170元至290元,实际成本取决于负载率和机房PUE,2U服务器的功耗到底是多少?2U服务器的功耗并非固定值,而是由硬件配置、负载程度和运行环境共同决定,行业标准中,2U机架式服务器通常设计为支持双路处理器,配合高密度内存……

    2026年7月29日
    1400
  • GeeCdn香港独立服务器春节促销好吗?香港高防服务器月付价格

    GeeCdn香港独立服务器春节促销方案中,2*L5630处理器搭配16G内存及20M带宽的月付320元或年付3000元套餐,是目前高并发场景下性价比极高的选择,特别适合对网络稳定性有严苛要求的建站与API开发用户,春节假期不仅是休息的时刻,也是技术架构升级的黄金窗口,对于许多开发者而言,服务器资源的稳定性直接决……

    2026年6月24日
    2500

发表回复

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