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/linux-nginx%e7%bc%93%e5%ad%98%e6%80%8e%e4%b9%88%e8%ae%be%e7%bd%ae%ef%bc%9flinux-nginx%e9%85%8d%e7%bd%ae%e7%bc%93%e5%ad%98%e7%9b%ae%e5%bd%95/

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

相关推荐

  • 一台服务器能有多少T,服务器硬盘容量怎么选?

    一个服务器有多少T,没有一个固定的数字,它取决于你配置了几块硬盘、每块硬盘多大容量,市面上常见的服务器存储配置从1T到8T不等,通过RAID阵列或扩展柜,单台物理机做到几十T甚至上百T都很常见,云服务器则更灵活,你可以先选一块系统盘,再按需挂载数据盘,随时扩容,服务器的“T”从哪里来要理解这个问题的起点,得先拆……

    2026年10月12日
    100
  • u1服务器到底还值多少钱,二手回收报价多少?

    u1服务器价值多少钱,没有统一标价:二手整机常见几百到数千元,新平台整机可到千元级到万元级,租用月付通常几百到数千元,托管月付从百元级到上千元不等;真正拉开差距的是带宽、IP、防御、机房资质和运维保障,很多人搜“u1服务器价值多少钱”,其实问的是1U机架式服务器,它可能是一台放在机房里的物理机,也可能是云厂商包……

    2026年10月4日
    000
  • squad服务器一个月多少钱

    租一台能流畅运行《Squad》(战术小队)的64人服务器,市场主流月付价格在200元至800元之间;若是百人满编且需要高主频CPU的配置,月付预算通常在1000元至2000元区间,这个价格区间基于国内持牌IDC服务商的公开报价与行业常见参数,具体取决于CPU型号、内存容量、带宽类型和防御能力,影响Squad服务……

    2026年8月13日
    400
  • 慈溪DNS服务器地址到底是多少,慈溪电信DNS怎么设置?

    慈溪地区首选DNS服务器地址为电信主用202.101.172.35、备用202.101.172.36,同时推荐备选阿里云DNS 223.5.5.5与114DNS 114.114.114.114,慈溪DNS服务器地址的完整配置方案为什么慈溪用户需要关注本地DNS地址慈溪隶属宁波,网络线路以电信骨干网为主,使用默认……

    2026年10月15日
    000
  • H5网页服务器租用一年大概多少钱,怎么选择

    H5网页服务器的价格并不固定,根据配置、带宽、防御和机房等级,月付从几十元到几百元甚至上千元不等,但多数中小型H5网站选择百元左右的入门级服务器即可满足需求,影响H5网页服务器价格的核心因素服务器配置:核心CPU与内存H5页面虽以前端渲染为主,但后端API、数据库读写、会话管理仍需消耗资源,常见配置包括1核1G……

    2026年8月20日
    600
  • 服务器上架要花多少钱,服务器上架费用多少?

    服务器上架收多少钱,没有一口价:它通常由一次性上架服务费和持续托管费组成,单台服务器上架人工常见在几十元到几百元,1U托管月付多在百元级到数百元,整柜则常见数千元到上万元;如果涉及高防、BGP多线、独享带宽和持牌自营机房,价格会继续上浮,真正靠谱的报价,会把上架、电力、带宽、IP、防护、运维和资质写清楚,服务器……

    2026年10月15日
    100
  • 一台服务器到底有多少T,服务器硬盘容量一般多大?

    一台服务器多少T,核心答案很直接: 市面上主流的物理服务器,存储容量通常在2T到24T之间,而高性能或存储型服务器则轻松突破100T,这里的“T”指的是硬盘容量(TB),不是内存也不是带宽,选多大容量,完全取决于你的业务是“跑网站”还是“装数据”,服务器的“T”到底代表什么很多人把“一台服务器多少T”理解成“性……

    2026年10月18日
    200
  • 中端服务器多少钱一台

    一台性能足够支撑几百人同时在线业务的中端服务器,市场价通常在2万到8万元之间,如果采用云服务器租用模式,同等配置的年费约在1万到3万元,这个价格区间覆盖了从传统企业ERP系统到中大型网站搭建的绝大多数需求,下面从硬件成本、部署形态、采购渠道三个维度拆解这笔预算,影响中端服务器价格的核心硬件参数中端服务器并没有统……

    2026年8月29日
    200
  • 新百区服务器到底有多少人,新百区服务器人数上限是多少?

    新百区服务器多少人,没有固定公开数值;它通常按区服承载上限、分线策略和开区阶段动态变化,玩家端只能通过排队提示、分线列表和官方公告做交叉判断, 如果你问的是“现在同时在线多少人”,答案要以游戏内实时状态为准;如果你问的是“一个区能装多少人”,则要看服务器架构、带宽和限流配置,新百区服务器多少人:先分清在线人数与……

    相关资讯 2026年10月21日
    100
  • 森华易腾服务器数量有多少,什么规模?

    森华易腾的服务器规模并非固定数值,其自建及租赁的物理服务器总量处于动态变化中,核心规模在数千台量级,但通过虚拟化技术支撑的业务实例远超此数,要衡量其真实体量,需从机柜数量、IP资源、带宽出口及客户密度等多个维度综合评估,服务器数量背后的IDC行业计量逻辑直接追问“多少台服务器”在IDC行业中往往得不到精确答案……

    2026年9月25日
    100

发表回复

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