我在 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
变量。它们将以相同的方式工作。expires
etag
if_modified_since