Nginx配置强缓存和协商缓存

3,002 阅读2分钟

1. 强缓存和协商缓存参数设置

  • 强缓存:默认读取本地资源,不发送请求
    • Pragma:no cache // 需要校验服务器文件新鲜度
    • Cache-Control: max-age:xxx秒
    • Expires: 过期时间设置 秒 可设置 1d 等
  • 协商缓存:需要校验文件的新鲜度,有两组请求头进行设置
    • Last-Modified-If-Modified-Since

    • ETag-If-None-Match

2. nginx如何配置强缓存和协商缓存

使用docker进行模式

2.1 nginx通用配置

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    access_log  /var/log/nginx/host.access.log  main;
    error_log  /var/log/nginx/error.log  error;

    location / {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Headers' '*';
        add_header 'Access-Control-Allow-Methods' '*';
        # OPTIONS 直接返回204
        if ($request_method = 'OPTIONS') {
                return 204;
        }
        root   /usr/share/nginx/html;
        # index  index.html index.htm;
        try_files $uri $uri/ /index.html;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

2.2 默认不设置开启协商缓存

第一次请求 image.png 第二次刷新 从内存读取 image.png 返回304 image.png

2.3 全部禁用

# 全部禁用 
expires -1; 
add_header Cache-Control "no-cache, no-store, must-revalidate, max-age=0";

image.png

2.4 开启强缓存

  • 使用expires参数
    • 转化成Cache-Control参数
    • 强缓存 -1 不使用缓存 max 最大值 315360000
expires 4;

# 关闭 etag 
# etag off; 

# 关闭 Last-Modified 
add_header Last-Modified "";

第一次 关注Expires字段 image.png 再次刷新 image.png

  • 使用Cache-Control参数
add_header 'Cache-Control' "max-age=10";

第一次

image.png

第二次 刷新 image.png

超过时间

image.png

  • 同时存在

add_header 'Cache-Control' "max-age=30";
expires 4; // 会转化,还是以这个为准

2.5 开启协商缓存

默认就是开启

2.6 开启强缓存和协商缓存

两者都设置以协商缓存为准

# 强缓存 以expires为准 
add_header 'Cache-Control' "public, max-age=10"; 

# 协商缓存 
add_header 'Cache-Control' "no-cache";

image.png

image.png

只设置max-age

如果未设置no-cache,会以强缓存的max-age为准,过期了,去服务器请求,返回304,协商缓存。

add_header 'Cache-Control' "public, max-age=30"; 

image.png

未过30s,本地读取,时间未发生变化:

image.png

超过30s,服务器校验,返回304:

image.png