帮助中心 >  技术知识库 >  云服务器 >  服务器教程 >  Nginx Proxy Cache 实战:构建高性能静态与动态缓存体系

Nginx Proxy Cache 实战:构建高性能静态与动态缓存体系

2026-06-25 16:33:57 677

Nginx Proxy Cache 实战:构建高性能静态与动态缓存体系

欢迎来到蓝队云技术小课堂,每天分享一个技术小知识。

在高并发业务场景中,数据库优化和代码优化固然重要,但很多运维人员忽略了 Nginx 自带的缓存能力。合理配置 Proxy Cache 后,可以显著降低后端服务器压力,提高页面响应速度,并增强整体系统抗并发能力。

本文介绍 Nginx Proxy Cache 的工作原理、配置方法及生产环境最佳实践。




Proxy Cache 工作原理

用户访问网站时:

用户

 

 

Nginx

 

 ├──缓存存在

 │     │

 │     ▼

 │   直接返回

 

 └──缓存不存在

       

       

   后端Web服务器

       

       

   返回内容并缓存

缓存命中后:

Client

   

   

 Nginx Cache

   

   

 Response

无需访问后端应用服务器。




创建缓存目录

创建缓存存储路径:

mkdir -p /data/nginx/cache

chown -R nginx:nginx /data/nginx/cache

查看磁盘空间:

df -h

建议缓存目录使用 SSD 磁盘。




配置缓存区域

编辑 nginx.conf:

http {

 

    proxy_cache_path /data/nginx/cache

                     levels=1:2

                     keys_zone=webcache:500m

                     inactive=24h

                     max_size=50g

                     use_temp_path=off;

 

}

参数说明:

参数

说明

levels

缓存目录层级

keys_zone

共享内存缓存索引

inactive

未访问缓存保留时间

max_size

缓存最大容量

use_temp_path

直接写入缓存目录




启用缓存

配置反向代理:

server {

 

    listen 80;

    server_name www.landui.com;

 

    location / {

 

        proxy_pass http://www.landui.com;

 

        proxy_cache webcache;

 

        proxy_cache_valid 200 301 302 30m;

 

        proxy_cache_valid 404 5m;

 

        proxy_cache_use_stale error timeout invalid_header updating

                              http_500 http_502 http_503 http_504;

 

        add_header X-Cache $upstream_cache_status;

    }

}

缓存状态说明:

状态

说明

MISS

未命中

HIT

命中

EXPIRED

缓存过期

STALE

使用旧缓存

UPDATING

缓存更新中

测试:

curl -I http://www.landui.com

输出:

X-Cache: MISS

再次访问:

X-Cache: HIT

说明缓存已经生效。




缓存静态资源

生产环境常见优化:

location ~* \\.(js|css|jpg|jpeg|png|gif|ico|webp)$ {

 

    proxy_pass http://www.landui.com;

 

    proxy_cache webcache;

 

    proxy_cache_valid 200 7d;

 

    expires 7d;

 

    add_header Cache-Control public;

}

缓存时间:

JS/CSS      7天

图片资源    30天

字体文件    30天

示例:

location ~* \\.(woff|woff2|ttf|eot)$ {

 

    expires 30d;

 

    proxy_cache webcache;

 

    proxy_cache_valid 200 30d;

}




动态页面缓存

很多业务页面更新频率较低。

例如:

新闻网站

产品展示页

企业官网

帮助中心

可以进行短时间缓存:

location / {

 

    proxy_pass http://www.landui.com;

 

    proxy_cache webcache;

 

    proxy_cache_valid 200 5m;

}

效果:

后端QPS:5000

缓存命中率:90%

 

实际后端QPS:

 

5000 × (1 - 90%)

= 500

后端压力下降 90%。




排除登录用户缓存

登录用户数据不能缓存。

配置:

map $http_cookie $skip_cache {

 

    default 0;

 

    ~SESSID 1;

 

    ~PHPSESSID 1;

 

    ~JSESSIONID 1;

}

调用:

location / {

 

    proxy_pass http://www.landui.com;

 

    proxy_cache webcache;

 

    proxy_no_cache $skip_cache;

 

    proxy_cache_bypass $skip_cache;

}

用户登录后自动绕过缓存。




防止缓存击穿

大量请求同时访问过期缓存时容易导致后端瞬间压力增大。

开启缓存锁:

proxy_cache_lock on;

 

proxy_cache_lock_timeout 10s;

 

proxy_cache_lock_age 10s;

工作方式:

1000个请求同时访问

 

1个请求回源

 

999个请求等待

 

缓存生成后统一返回

避免缓存雪崩。




缓存预热方案

提前生成热点缓存。

示例脚本:

#!/bin/bash

 

URLS=(

https://www.landui.com/

https://www.landui.com/news

https://www.landui.com/product

)

 

for url in ${URLS[@]}

do

    curl -s -o /dev/null $url

done

加入计划任务:

*/10 * * * * /opt/cache_warm.sh

实现热点页面自动预热。




查看缓存命中率

日志格式:

log_format cachelog

'$remote_addr '

'$request '

'$status '

'$upstream_cache_status';

配置:

access_log /var/log/nginx/cache.log cachelog;

统计命中率:

awk '{print $4}' cache.log | sort | uniq -c

示例结果:

120000 HIT

15000 MISS

3000 EXPIRED

计算:

echo "scale=2;120000/(120000+15000)*100" | bc

输出:

88.88%




生产环境推荐配置

proxy_cache_path /data/nginx/cache

                 levels=1:2

                 keys_zone=webcache:500m

                 inactive=24h

                 max_size=100g

                 use_temp_path=off;

 

proxy_cache_lock on;

proxy_cache_lock_timeout 10s;

proxy_cache_lock_age 10s;

 

proxy_cache_use_stale error timeout

                       invalid_header

                       updating

                       http_500

                       http_502

                       http_503

                       http_504;

适用于:

企业官网

CMS系统

论坛社区

WordPress

Discuz

电商平台

API网关

通过合理使用 Nginx Proxy Cache,很多原本需要扩容服务器才能解决的性能问题,往往仅通过缓存优化即可获得数倍甚至数十倍的性能提升。在生产环境中,缓存命中率能够稳定保持在 85% 以上时,后端服务器资源消耗通常会明显下降,是高并发架构中成本最低、收益最高的优化手段之一。

蓝队云官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,蓝队云整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。

更多技术知识,蓝队云期待与你一起探索。

 

 

 


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: