朝阳博客

  • Article
  • Project
  • HTML+CSS
  • Bootstrap
  • JavaScript
  • jQuery
  • PHP
  • Java
  • Linux
  • MySQL
朝阳博客
一款专注于博客的响应式网站
  1. 首页
  2. Article
  3. 正文

Nginx设置文件图片视频文档缓存

2026年3月17日 2点热度 0人点赞 0条评论

在http模块写上

http{
    # 1. 定义是否为静态文件
    map $uri $is_static_file {
        default 0;
        ~*\.(gif|png|jpg|jpeg|webp|css|js|woff|woff2|svg|ico|ttf|eot|pdf|doc|docx|xls|xlsx|ppt|pptx|mp4|avi|mov|wmv|flv|swf|zip|rar|tar|gz)$ 1;
    }
     # 2. 定义是否跳过服务端缓存
    map $is_static_file $bypass_cache {
        1 0;  # 静态文件:不跳过缓存
        0 1;  # 动态API:跳过缓存
    }

    # 3. 定义浏览器缓存时间
    map $uri $browser_cache_expires {
        default -1;  # 动态内容:不缓存
        ~*\.(gif|png|jpg|jpeg|webp|ico|svg|mp4|avi|mov|wmv|flv|swf|pdf|zip|rar|tar|gz)$ "365d";  # 图片/视频:缓存1年
        ~*\.(css|js|woff|woff2|ttf|eot)$ "30d";  # CSS/JS/字体:缓存30天
        ~*\.(doc|docx|xls|xlsx|ppt|pptx)$ "7d";  # Office文档:缓存7天
    }

    # 4. 定义浏览器 Cache-Control 头
    map $uri $browser_cache_control {
        default "no-cache, no-store, must-revalidate";  # 动态内容:强制不缓存
        ~*\.(gif|png|jpg|jpeg|webp|ico|svg|mp4|avi|mov|wmv|flv|swf|pdf|zip|rar|tar|gz)$ "public, immutable";  # 图片等:永久缓存
        ~*\.(css|js|woff|woff2|ttf|eot)$ "public, max-age=2592000";  # CSS/JS:缓存30天
        ~*\.(doc|docx|xls|xlsx|ppt|pptx)$ "public, max-age=604800";  # Office文档:缓存7天
    }

    # 5. 定义服务端缓存路径
    proxy_cache_path /www/wwwroot/cache
        levels=1:2
        keys_zone=api_cache:10m
        max_size=5g
        inactive=30d
        use_temp_path=off;
}

在你反向代理或者配置里写上

location ^~ /api/ {
    # ------------------------------
    # 1. 核心代理逻辑(保留你的原有配置)
    # ------------------------------
    rewrite ^/api/(.*)$ /$1 break;
    proxy_pass http://localhost:31000/;
    proxy_set_header Host localhost;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_buffers 16 64k;
    proxy_buffer_size 128k;
    proxy_busy_buffers_size 256k;
    proxy_temp_file_write_size 256k;
    proxy_connect_timeout 1000s;
    proxy_send_timeout 1000s;
    proxy_read_timeout 1000s;
    proxy_next_upstream error timeout http_502 http_503 http_504;
    proxy_next_upstream_tries 3;
    client_max_body_size 100m;

    # ------------------------------
    # 2. 服务端缓存配置
    # ------------------------------
    proxy_cache api_cache;
    proxy_cache_key "$scheme$request_method$host$request_uri";
    proxy_cache_valid 200 206 301 302 30d;
    proxy_cache_bypass $bypass_cache;
    proxy_no_cache $bypass_cache;

    # 忽略后端干扰 Nginx 缓存的头
    proxy_ignore_headers Cache-Control Expires Set-Cookie;

    # 隐藏后端返回的所有缓存相关头(防止传给浏览器)
    proxy_hide_header Cache-Control;
    proxy_hide_header Expires;
    proxy_hide_header Pragma;
    proxy_hide_header Surrogate-Control;
    proxy_hide_header Set-Cookie;

    # 添加服务端缓存命中状态头
    add_header X-Cache-Status $upstream_cache_status always;

    # ------------------------------
    # 3. 浏览器缓存配置(严格区分静态/动态)
    # ------------------------------

    # 统一添加缓存头(根据 map 变量自动区分)
    expires $browser_cache_expires;
    add_header Cache-Control $browser_cache_control always;

    # ✅ 仅动态 API 补充这两个头
    if ($is_static_file = 0) {
        add_header Pragma "no-cache" always;
        add_header Expires "0" always;
    }

    # 静态文件关闭访问日志(减少磁盘 IO)
    access_log off;
}
标签: 暂无
最后更新:2026年3月17日

aiyao

你要加油,你喜欢的人还没结婚。

点赞
< 上一篇

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2021 zhaoyangweb.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

冀ICP备2021020018号-1