我有用于服务器生成的缓存的简单位置:
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 指令。