如何配置 Nginx 缓存加速减少负载均衡后端数据库压力

文章导读
合理配置 Nginx 反向代理缓存可将 10MB 共享内存区缓存约 8 万个请求键,显著降低后端数据库查询压力,实测静态资源缓存命中率可达 90% 以上。
📋 目录
  1. 原因分析
  2. 解决方案
  3. 注意事项
  4. 参考来源
A A

如何配置 Nginx 缓存加速减少负载均衡后端数据库压力

合理配置 Nginx 反向代理缓存可将 10MB 共享内存区缓存约 8 万个请求键,显著降低后端数据库查询压力,实测静态资源缓存命中率可达 90% 以上。

原因分析

在现代 Web 架构中,后端服务器常常需要处理大量重复请求。当多个用户同时访问同一篇博客文章或相同的图片资源时,后端服务器会重复处理这些请求,造成不必要的资源消耗。根据 2026 年 1 月 24 日发布的 Nginx UI 反向代理缓存指南,反向代理缓存通过将常用资源存储在代理服务器上,直接响应用户请求,从而减少后端服务器的请求处理压力、降低网络延迟、提高网站的并发处理能力并节省服务器带宽资源。

Nginx 缓存是指将后端服务器 (如 PHP、Node.js 或 Java 应用) 返回的响应内容临时存储在本地磁盘或内存中。当下一次有相同请求时,Nginx 可以直接返回缓存内容,而无需再次访问后端。根据 2025 年 11 月 25 日发布的 Nginx 缓存性能优化文章,默认情况下 Nginx 并不会自动启用缓存,如果不进行合理配置,可能导致缓存未生效每次请求都穿透到后端、缓存时间过长用户看到过期内容、缓存占用过多磁盘空间或动态内容被错误缓存导致数据不一致。

解决方案

第一步:定义缓存区域与路径

在 Nginx 配置文件 (通常位于/etc/nginx/nginx.conf 或站点配置文件中) 定义一个缓存区。根据 2026 年 1 月 5 日发布的 Nginx 缓存优化配置指南,在 http 块中添加以下配置:

http {
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:128m max_size=10g inactive=60m use_temp_path=off;
}

参数说明:/var/cache/nginx 为缓存文件存储路径,levels=1:2 设置目录层级结构避免单目录文件过多,keys_zone=my_cache:128m 定义共享内存区名称和大小 (10MB 可缓存约 8 万个 key),max_size=10g 设置最大缓存空间,inactive=60m 表示 60 分钟内未被访问的缓存将被自动清理,use_temp_path=off 提升性能避免临时文件中转。

注意需确保缓存目录存在且 Nginx 有读写权限,执行以下命令:

sudo mkdir -p /var/cache/nginx
sudo chown -R www-data:www-data /var/cache/nginx  # Ubuntu/Debian 系统

第二步:在 server 或 location 中启用缓存

在站点配置中启用缓存规则。根据 2026 年 3 月 24 日发布的如何利用 Nginx 边缘缓存减少后端服务器的带宽压力文章,在 location 或 server 块中配置:

server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://backend_servers;
        proxy_cache my_cache;
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;
        proxy_cache_use_stale error timeout updating;
        proxy_cache_bypass $http_cache_control;
        add_header X-Cache-Status $upstream_cache_status;
    }
}

关键指令解释:proxy_cache my_cache 使用前面定义的缓存区,proxy_cache_valid 对不同状态码设置缓存时间 (200/302 响应缓存 10 分钟,404 页面缓存 1 分钟),proxy_cache_use_stale 当后端异常时可返回旧缓存提升可用性,X-Cache-Status 响应头显示缓存状态 (HIT/MISS/BYPASS) 便于调试。

第三步:配置负载均衡策略

结合 upstream 模块实现负载均衡。根据 2026 年 4 月 28 日发布的 Nginx 高可用配置实战文章,创建/etc/nginx/conf.d/app.conf:

upstream backend_servers {
    server 192.168.1.101:8080 weight=5;
    server 192.168.1.102:8080 weight=5;
    server 192.168.1.103:8080 weight=3 backup;
    keepalive 32;
}

Nginx 支持多种负载均衡策略:轮询 (默认) 依次将请求分发到每个后端服务器,加权轮询为每个服务器分配不同的权重 (权重越高分配到的请求越多),IP 哈希根据客户端的 IP 地址将请求分发到固定的后端服务器适用于需要会话保持的场景,最少连接将请求分发到当前连接数最少的服务器适用于处理时间较长的请求。keepalive 32 设置长连接数减少 TCP 握手开销。

第四步:排除动态内容避免错误缓存

不是所有内容都适合缓存。根据 2025 年 11 月 25 日发布的缓存性能优化文章,登录页、购物车等动态内容应跳过缓存:

proxy_cache_bypass $http_cookie $arg_nocache;
proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;

对于含查询参数但语义等价的 URL(如/api/list?page=1&sort=name 和/api/list?sort=name&page=1),用 proxy_cache_key 统一缓存键:

proxy_cache_key "$scheme://$host$request_uri";

第五步:静态资源单独缓存

静态资源 (JS/CSS/图片) 建议单独 location 匹配,设更长缓存时间。根据 2026 年 1 月 24 日发布的优化反向代理缓存性能的 5 个技巧,不同类型的资源应设置不同的缓存时间:

如何配置 Nginx 缓存加速减少负载均衡后端数据库压力
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    proxy_cache_valid 200 24h;
    proxy_cache my_cache;
}

静态资源建议缓存 7-30 天,并配合版本号或哈希命名实现长期缓存 (Cache-Control: immutable)。

注意事项

1. 缓存目录权限问题:确保/var/cache/nginx 目录存在且 Nginx 工作进程有读写权限,否则会出现缓存写入失败。根据 2026 年 1 月 5 日文章,需执行 chown -R www-data:www-data /var/cache/nginx(Ubuntu/Debian 系统) 或 chown -R nginx:nginx /var/cache/nginx(CentOS 系统)。

2. 缓存键设计不当导致命中率低:默认缓存键基于$scheme$proxy_host$request_uri,可根据需要调整以支持带参接口或区分用户身份。根据 2026 年 3 月 24 日文章,可通过 map 指令标准化参数顺序提高命中率。

3. 动态内容被错误缓存:登录态请求、购物车等应跳过缓存。使用 proxy_cache_bypass $http_cookie 可跳过带 Cookie 的请求。根据 2025 年 8 月 26 日博客园文章,需仔细区分动态与静态内容。

4. 缓存空间不足:max_size 控制磁盘总容量,需根据实际业务量设置。根据 2025 年 11 月 25 日文章,建议使用 SSD 磁盘提升缓存读写速度。

5. 缓存更新机制:配合 Cache-Control: no-cache 请求头可触发刷新,使用 proxy_cache_purge 实现类似 CDN 的 purge 功能。根据 2026 年 3 月 24 日文章,可设置 proxy_cache_purge $http_cache_control 强制更新缓存。

6. 监控缓存状态:通过 X-Cache-Status 响应头 (HIT/MISS/BYPASS) 监控缓存命中情况,便于调试和优化。根据 2026 年 1 月 5 日文章,添加 add_header X-Cache-Status $upstream_cache_status 可实时查看缓存状态。

参考来源

来源:CSDN 博客 - Nginx 高可用配置实战:负载均衡 + 限流 + 缓存,一文搞定生产环境 (2026 年 4 月 28 日)

来源:Nginx UI 官方指南 - Nginx UI 反向代理缓存:减轻后端服务器压力的终极指南 (2026 年 1 月 24 日)

来源:技术博客 - 如何利用 Nginx 边缘缓存减少后端服务器的带宽压力 (2026 年 3 月 24 日)

来源:博客园 - Nginx 负载均衡和缓存设置 - yfceshi(2025 年 8 月 26 日)