仅为单个请求(或遵循特定路径字符串的请求)发送缓存标头

仅为单个请求(或遵循特定路径字符串的请求)发送缓存标头

我在 nginx 配置中定义代理传递如下:

location / {
        proxy_pass http://localhost:3001;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        add_header Last-Modified $date_gmt;
        add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
        if_modified_since off;
        expires off;
        etag off;
        proxy_read_timeout 300s;
        proxy_connect_timeout 300s;
        proxy_send_timeout 300s;
        send_timeout 300s;
}

如您所见,Cache-Control传递了 header,它告诉浏览器不缓存任何内容。但是对于具有 path 的请求之一/load-custom-js,我想返回一个不同的缓存 header,它告诉浏览器缓存响应。我该怎么做?我需要添加新的代理传递块吗?

答案1

可以使用 nginxmap来实现这一点。在http层级上,定义 map 如下:

map $request_uri $cachecontrol {
    default 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
    "~^/load-custom-js " 'CACHE_HEADER';
}

在您的块中,按如下方式location使用变量:$cachecontrol

add_header Cache-Control $cachecontrol;

您可能想要为、和添加几个map变量。它们将以相同的方式工作。expiresetagif_modified_since

相关内容