NGINX - 我如何为所有虚拟主机设置过期 headers?

NGINX - How would I set expires headers for all virtual hosts?

我正在寻找一种方法来设置服务器范围的过期时间 headers 以便所有现有的或新的虚拟主机都配置相同。不幸的是,我无法在每个虚拟主机的 conf 文件中执行此操作,因此我正在寻找一种方法来使以下指令在服务器范围内生效。

location ~* .(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg
              |jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid
              |midi|wav|bmp|rtf)$ {
    expires max;
    log_not_found off;
    access_log off;
}

expires 指令可以放在 http 块中,因此被所有服务器块及其位置块继承。

手册显示了使用带有 map 变量的 expires 指令的示例。参见 this document

您可以使用 $request_uri 而不是 $sent_http_content_type 来匹配您现有的正则表达式并实现相同的行为:

map $request_uri $expires {
    default off;
    ~*\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)(\?|$) max;
}    
expires $expires;

两个指令都放在 http 块内但在任何 server 块外。

详情见this document