我正在使用它通过 nginx 提供静态文件服务:
location /static/images {
alias /root/story/static/images;
}
cloudflare 将为我缓存该文件
但是,如果文件是404,那么cloudflare也会缓存404,即使该文件稍后存在。
那么,如果文件是 404,我该如何让 nginx 返回“no-cache”标头?
答案1
像这样:
location /static/images {
...
if (!-e $request_filename) {
add_header Cache-Control 'no-cache';
}
}
答案2
为了在文件不存在时提供后备方案,你可以使用try_files
与命名位置结合。
此外,您还需要使用add_header
设置always
标志以便在具有除指定列表之外的状态代码的响应中插入标头。
location /static/images {
root /root/story;
try_files $uri @notFound;
}
location @notFound {
internal;
add_header Cache-Control no-cache always;
}
注意:尽可能root
优先于alias
,因为后者可能会导致不良行为,与其他指令相冲突,例如try_files
。