如何让 Nginx 别名在 404 时返回自定义标头?

如何让 Nginx 别名在 404 时返回自定义标头?

我正在使用它通过 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

相关内容