- 工信部备案号 滇ICP备05000110号-1
- 滇公网安备53011102001527号
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
- CN域名投诉举报处理平台:电话:010-58813000、邮箱:service@cnnic.cn
欢迎来到8455线路检测中心技术小课堂,每天分享一个技术小知识。
在云计算和Web服务架构中,Nginx作为高性能的反向代理服务器,其缓存功能是提升应用响应速度、减轻后端负载的利器。一个配置得当的反向代理缓存,可以静态化动态内容,显著提升用户体验。本文将深入讲解如何配置Nginx的反向代理缓存,并提供一个完整的实战示例。
这是定义缓存空间的基础。它需要在http上下文中配置,定义了缓存的存储路径、结构、大小和规则。
基本语法与参数详解:
http {
proxy_cache_path /var/cache/nginx levels=1:2
keys_zone=my_cache:10m
max_size=1g inactive=60m use_temp_path=off;
server {
# ... 服务器配置
}
}
参数详解:
/var/cache/nginx: 缓存文件在硬盘上的存储路径。
levels=1:2: 设置缓存目录的层级结构。1:2表示一级目录用1个字符(0-9, a-f),二级目录用2个字符。这有助于避免单个目录文件过多,影响文件系统性能。这是针对海量缓存项的关键优化。
keys_zone=my_cache:10m: 在共享内存中定义一个名为my_cache的键值区,用于存储缓存键和元数据(如“缓存是否命中”)。10m大约可以存储80000个键。这是内存空间,不是缓存文件的大小。
max_size=1g: 设置缓存目录的最大容量。当缓存总量超过此值时,Nginx会启动“缓存管理器”进程,根据inactive时间和最近最少使用(LRU)算法清理缓存。
inactive=60m: 指定缓存项在60分钟内没有被访问(无论是否过期),则被标记为“不活跃”,可被清理。此参数与max_size协同工作。
use_temp_path=off: 建议设置为off,让Nginx直接将临时文件写入缓存目录,避免在配置了proxy_temp_path时,在不同文件系统间进行不必要的数据拷贝,提升性能。
定义了缓存路径后,需要在具体的location块中启用并配置缓存行为。
实战配置示例:
假设我们有一个运行在http://www.landui.com:8000的后端应用(如Node.js、Java应用),我们需要对其API响应进行缓存。
server {
listen 80;
server_name api.example.com;
location / {
# 启用缓存,并指定使用`http`块中定义的`my_cache`键值区
proxy_cache my_cache;
# 为缓存项定义键。这里将请求方法、域名、URI和查询参数组合作为唯一键。
# 这意味着`GET /api/user?id=1`和`GET /api/user?id=2`会被缓存为不同的项。
proxy_cache_key "$scheme$request_method$host$request_uri";
# 设置什么情况下响应才会被缓存。
# 这里表示:当后端返回状态码为200、302时,缓存24小时。
proxy_cache_valid 200 302 24h;
# 当后端返回状态码为404时,缓存1分钟,避免缓存无效请求过久。
proxy_cache_valid 404 1m;
# 可以定义更多状态码的缓存时间...
# proxy_cache_valid 500 502 503 504 5m; // 对5xx错误缓存5分钟,保护后端
# 添加响应头,便于客户端和调试时了解缓存命中状态(HIT, MISS, BYPASS, EXPIRED等)
add_header X-Cache-Status $upstream_cache_status;
# 其他必要的代理参数
proxy_pass http://www.landui.com:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# 可选:创建一个用于清除缓存的内部接口(需搭配访问控制,如只允许内网IP)
location ~ /purge-cache(/.*) {
allow 192.168.1.0/24; # 仅允许内网网段
deny all;
proxy_cache_purge my_cache "$scheme$request_method$host$1";
}
}
配置检查与重载:
sudo nginx -t # 测试配置文件语法
sudo systemctl reload nginx # 平滑重载配置
检查缓存头:
使用curl访问你的API,并观察返回的HTTP头部:
curl -I http://www.landui.com/some-api
在返回的头部中,你应该能看到 X-Cache-Status: MISS(第一次访问)。再次执行相同的命令,应该会看到 X-Cache-Status: HIT,这证明缓存已成功工作。
观察缓存目录:
文件会按照levels参数定义的规则生成在/var/cache/nginx目录下。你可以通过ls或tree命令查看文件结构,了解缓存是如何被组织和存储的。
1.
通过精细配置proxy_cache_path和proxy_cache_*系列指令,你可以为你的后端服务构建一个强大的缓存层。这不仅大幅降低了后端应用和数据库的负载,更能为终端用户提供接近静态文件的响应速度。关键在于理解keys_zone(内存索引)、max_size与inactive(磁盘清理策略)以及proxy_cache_key(缓存键设计)的工作原理,并根据你的业务特点(如数据更新频率)调整proxy_cache_valid(缓存时间)策略,从而在数据“新鲜度”和系统性能之间取得最佳平衡。
8455线路检测中心官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,8455线路检测中心整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。
更多技术知识,8455线路检测中心期待与你一起探索。
售前咨询
售后咨询
备案咨询
二维码

TOP