- 工信部备案号 滇ICP备05000110号-1
- 滇公网安备53011102001527号
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
- CN域名投诉举报处理平台:电话:010-58813000、邮箱:service@cnnic.cn
欢迎来到蓝队云技术小课堂,每天分享一个技术小知识。
在高并发业务场景中,数据库优化和代码优化固然重要,但很多运维人员忽略了 Nginx 自带的缓存能力。合理配置 Proxy Cache 后,可以显著降低后端服务器压力,提高页面响应速度,并增强整体系统抗并发能力。
本文介绍 Nginx 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% 以上时,后端服务器资源消耗通常会明显下降,是高并发架构中成本最低、收益最高的优化手段之一。
蓝队云官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,蓝队云整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。
更多技术知识,蓝队云期待与你一起探索。
售前咨询
售后咨询
备案咨询
二维码

TOP