我知道如何按 mime 类型分配 NGINX Expires 标头()。但是,不清楚如何使用此方法为每个虚拟主机分配不同的 Expires 标头。例如,我可能在上下文中有以下内容http。因为map指令需要进入上下文http,所以映射和$expires将全局应用于所有虚拟主机。

map $sent_http_content_type $expires {
  ~text/ -1;
  default max;
}

然后我可以添加$expireshttp(全局应用)serverlocation

expires $expires;

如果我现在想为另一个网站设置不同的过期时间,该怎么办?我需要创建一个新的地图$website2

map $sent_http_content_type $website2 {
  ~application/ -1;
  ~text/ -1;
  default max;
}

…然后将其专门分配给我想要使用它的虚拟主机。

server {
  server_name mydomain.com;
  ...
  expires $website2;

现在这确实有效,但现在所有虚拟主机的所有请求都将映射$sent_http_content_type到多个变量,即使每个 $var 仅用于(并且仅用于)单个虚拟主机。这不是很低效吗?我遗漏了什么吗?

3

  • 1
    expires根据我的经验,Nginx 不会对映射进行任何操作,除非需要 $var。因此,在处理请求时,在需要值的地方,$website2将与其映射一起进行评估。


    – 

  • 1
    1. Richard 完全正确;映射变量只有在需要其值时才会被评估。2. 就性能而言,使用仅包含字符串的较大表并避免使用正则表达式会更有效。有关这方面的更多信息,请参阅map答案的最后一部分


    – 

  • 你们说得对……


    – 


最佳答案
1

不用担心地图太多。

由于变量仅在使用时才被评估,因此即使仅仅声明大量“ map”变量也不会给请求处理增加任何额外成本。

0