当 try_files 存在时,Nginx 位置块 add_header 不起作用?

当 try_files 存在时,Nginx 位置块 add_header 不起作用?

我有用于服务器生成的缓存的简单位置:

location /api/get-hloc {


#add acccess-allow headers
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

#try cached files
        root /dev/shm/get-hloc/;
        try_files /$arg_hash.hloc /stocks/graphics/get-iis-graphic?$args;
}

它做什么?它只是检查内存中是否有可以满足请求的文件,如果没有文件,则尝试实际生成文件以供将来请求的位置并将其提供给客户端。

一切按预期工作,除了add_header被忽略的指令之外。

是否可以在 try_files 中尝试新位置之前添加标头,或者我应该仅在端点位置添加标头?

答案1

尝试将“always”添加到 add_header 指令:

如果总是指定了参数(1.7.5),则无论响应代码如何,都会添加标头字段。

文档更多细节。

对于你的例子它看起来像这样:

location /api/get-hloc {
  #add acccess-allow headers
  add_header 'Access-Control-Allow-Origin' '*' always;
  add_header 'Access-Control-Allow-Credentials' 'true' always;
  add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
  add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type' always;

  #try cached files
  root /dev/shm/get-hloc/;
  try_files /$arg_hash.hloc /stocks/graphics/get-iis-graphic?$args;
}

请留意文档的以下段落:

add_header 指令可以有多个。当且仅当当前级别上没有定义 add_header 指令时,这些指令才会从上一级继承。

这意味着如果您在前一级别(例如服务器级别)有 add_header 指令,它们将被忽略,并且只会使用当前位置级别的 add_header 指令。

相关内容