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

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

相关推荐

  • 红警如何在Linux系统上安装?,怎么下载

    在Linux系统上运行红色警戒(红警)的最佳方案是使用开源引擎OpenRA,或者通过Wine兼容层运行原版游戏,两者各有优劣,本文为你详细解析从安装到优化的全流程,红警Linux安装教程:OpenRA和Wine双方案详解OpenRA:原生开源引擎的体验OpenRA是一个完全重写的红警系列引擎,基于C#和SDL……

    2026年7月20日
    3200
  • 装一套服务器需要多少钱,费用明细有哪些?

    装一套服务器,从几千块的入门级到几十万的企业级都有可能,但绝大多数中小企业的真实预算落在1万到5万这个区间,具体花多少取决于你的业务类型、数据量和对稳定性的要求,而不是硬件本身的价格,服务器价格为什么差这么多?先搞懂钱花在哪你在电商平台搜“服务器”,能看到几百块的二手拆机件,也能看到报价几十万的机架式四路服务器……

    2026年9月8日
    200
  • 4核8g5m酷番云服务器多少钱,值得买吗?

    腾讯云4核8G5M服务器标准年付价格通常在1000-2000元之间,但通过新用户活动或长期优惠,实际入手价可低至数百元,具体取决于是否叠加代金券和购买时长,4核8g5m腾讯云服务器价格全解析官方定价与活动价对比在腾讯云官网,4核8G5M配置的包年包月标准价格因地域和计费方式略有浮动,把地域选为华北地区,按年订阅……

    2026年7月25日
    1300
  • 中国移动dns的服务器地址是多少?,怎么设置?

    中国移动DNS服务器地址主用是211.136.112.50,备用是211.136.150.66,这两个地址在中国移动宽带和移动数据网络中通用,是提升网络解析效率的首选设置,中国移动DNS服务器地址清单全国通用地址主用DNS:211.136.112.50备用DNS:211.136.150.66备选地址:211.1……

    2026年8月18日
    18600
  • 桌面Linux哪个好用?新手入门最佳Linux发行版推荐

    2026年桌面Linux首选推荐为Ubuntu LTS版用于日常办公、Arch Linux用于极客折腾、Fedora Workstation用于开发者前沿体验,具体选择需依据硬件配置与技术熟练度而定,桌面Linux生态在2026年已彻底告别“极客专属”的刻板印象,转而成为追求隐私安全、系统纯净及高度定制化的主流……

    2026年7月6日
    14100
  • 一套大服务器多少钱啊

    一套大服务器的价格通常在数万元到数十万元之间,如果采用租用模式,年成本大约在1万到10万元这个区间,具体取决于配置、带宽和部署方式,很多人一上来就问我“大服务器多少钱”,其实这个问题就像问“一辆车多少钱”一样,答案浮动范围很大,今天咱们不绕弯子,把影响价格的核心因素拆开来看,让你心里有个底数,决定价格的核心硬件……

    2026年9月12日
    100
  • QQ飞车手游有多少个服务器?,哪个区最火爆?

    QQ飞车手游目前共设有微信区、QQ区两大登录体系,其下细分总计超过30个大区服务器,且安卓与iOS系统数据互通,玩家无需担心系统壁垒,很多玩家在入坑或转区时,最头疼的问题就是搞不清服务器划分逻辑,有人冲着”新区”去,结果发现是老区合服;有人想和朋友一起玩,却因为大区不同只能干瞪眼,今天这篇文章,咱们就把QQ飞车……

    2026年8月28日
    900
  • 企业级100T文件存储服务器多少钱一台,报价合理吗?

    100T文件储存服务器,无论是自建还是租用,一次性投入和长期成本差异巨大;如果从TCO(总拥有成本)角度算,租用持牌机房的云存储方案,每年预算通常在数千至数万元区间,而自建一套高可用阵列的硬件成本起步就在8万元以上,很多时候,客户咨询”100T文件储存服务器多少钱”时,真正想问的是”如何用最合理预算解决这100……

    2026年9月5日
    200
  • 300w服务器一个月多少钱,租用价格多少?

    一台300W功率的服务器,如果选择正规IDC机房托管,每月总成本通常在500元到1500元之间,具体取决于带宽、IP数量和服务商资质,300W服务器成本构成机位托管费机房按占用空间收费,常见标准是1U机位,1U托管费在300-600元/月,部分机房对高功率设备额外加收空间占用费,电力费用300W额定功率实际运行……

    2026年7月26日
    200
  • linux find mv怎么批量移动文件?linux find mv批量移动文件命令

    使用 find 命令结合 -exec 或 xargs 配合 mv 是 Linux 系统中批量移动文件最高效、最安全的标准方案,它能精准定位并转移海量文件,避免手动操作带来的效率低下与误删风险,在 Linux 日常运维或数据迁移场景中,文件管理是高频痛点,当面对成千上万个分散在不同目录的日志文件、图片资源或备份数……

    2026年7月7日
    5100

发表回复

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