Nginx 缓存配置:动静分离,快如闪电

你是不是也遇到过这种情况:

静态资源没变,每次用户访问却都要重新加载,服务器压力大,页面还慢。

其实 Nginx 自带一套很顺手的缓存机制。

今天这篇直接给你动静分离 + 缓存配置模板,复制就能用。

看完你会得到:

  • 一套可直接上线的缓存配置

  • 静态资源命中率明显提升

  • 服务器负载肉眼可见下降


一、先搞清楚一个概念:动静分离

→ 动态请求(PHP、Java、API)
→ 静态资源(图片、CSS、JS、字体、HTML)

动静分离 = 把静态请求交给 Nginx 直接返回,不转给后端。

这里有个坑:很多人把图片也走后端应用服务器,白白浪费 CPU。


二、最简单的动静分离配置

直接上配置,放在 server {} 里:

复制代码
# 静态资源直接由 Nginx 处理
location ~* \.(jpg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
    root /var/www/static;
    expires 30d;
    add_header Cache-Control "public, immutable";
}

# 动态请求转发到后端
location / {
    proxy_pass http://backend_servers;
}

解释一下:

  • expires 30d → 告诉浏览器缓存 30 天

  • immutable → 文件不变,不用反复确认

  • 动态请求走 proxy_pass


三、再加一层 Nginx 本地缓存(更强)

如果你希望连后端请求都能缓存 (比如接口数据、HTML),用 proxy_cache

三步配置:

1. 在 http {} 里定义缓存区

复制代码
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

2. 在 server {}location {} 里启用

复制代码
location / {
    proxy_cache my_cache;
    proxy_cache_key "$scheme$request_method$host$request_uri";
    proxy_cache_valid 200 302 60m;
    proxy_cache_valid 404 1m;
    proxy_cache_use_stale error timeout updating;

    proxy_pass http://backend_servers;
}

3. 加个缓存命中标识(方便测试)

复制代码
add_header X-Cache-Status $upstream_cache_status;

返回结果:

  • HIT → 命中缓存 ✅

  • MISS → 未命中

  • BYPASS → 绕过


四、动静分离 + 本地缓存,完整模板

复制代码
http {
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=static_cache:10m max_size=2g inactive=30d use_temp_path=off;

    server {
        listen 80;
        server_name example.com;

        # 静态资源:走本地缓存
        location ~* \.(css|js|jpg|png|gif|ico|svg|woff|woff2|ttf|eot)$ {
            root /var/www/static;
            expires 30d;
            add_header Cache-Control "public, immutable";
            add_header X-Resource-Type "static";
        }

        # 动态请求:走 proxy_cache
        location / {
            proxy_cache static_cache;
            proxy_cache_key "$host$request_uri";
            proxy_cache_valid 200 302 60m;
            proxy_cache_use_stale error timeout updating;
            add_header X-Cache-Status $upstream_cache_status;
            proxy_pass http://backend_servers;
        }
    }
}

五、几个你可能踩到的坑

正确做法
缓存区目录没权限 chown -R www-data /var/cache/nginx
动态请求不该缓存但缓存了 proxy_cache_bypass 或按 cookie 跳过
用户看不到最新静态资源 加版本号:style.css?v=20260411
缓存空间填满 设置 max_size 并配 inactive 自动清理

六、一句话总结

动静分离 + proxy_cache = 又快又稳。

  • 静态资源:Nginx 直接吐,浏览器长期缓存

  • 动态请求:Nginx 本地缓存,减少后端压力

  • 一套配置,复制就能跑

相关推荐
ping某17 小时前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智3 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
ofoxcoding3 天前
在AI API聚合平台配置DeepSeek V3.2提示词缓存实战:快速接入与成本优化指南
人工智能·spring·缓存·ai
施努卡机器视觉3 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦3 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw