在nginx位置指令中为标题添加标题

时间:2017-05-15 00:06:06

标签: nginx nginx-location

我尝试将响应标头添加到仅提供的一个位置路径,并使nginx配置看起来像

server {
    ...
    add_header x-test test;
    location /my.img {
        rewrite ^/my.img$ /119.img;
        add_header x-amz-meta-sig 1234567890abcdef;
    }
}

但只有顶级标题(x-test)有效,location指令中的标题不会显示,如

所示
$ curl -v -o /tmp/test.img 'https://www.example.com/my.img'
< HTTP/1.1 200 OK
< Server: nginx/1.9.3 (Ubuntu)
< Date: Sun, 14 May 2017 23:58:08 GMT
< Content-Type: application/octet-stream
< Content-Length: 251656
< Last-Modified: Fri, 03 Mar 2017 04:57:47 GMT
< Connection: keep-alive
< ETag: "58b8f7cb-3d708"
< x-test: test
< Accept-Ranges: bytes
< 
{ [16104 bytes data]

如何仅为所提供的特定文件发回自定义headrr。

1 个答案:

答案 0 :(得分:2)

rewrite语句是隐式rewrite...last,这意味着此/119.img块不处理最终URI location。在计算响应标头时,nginx位于不同的location块中。

您可以尝试使用rewrite...break语句在同一位置块内处理最终URI。有关详细信息,请参阅this document

location = /my.img {
    root /path/to/file;
    rewrite ^ /119.img break;
    add_header x-amz-meta-sig 1234567890abcdef;
}

如果location仅与一个URI匹配,请使用=格式。有关详细信息,请参阅this document

另请注意,此add_header块中存在location语句将意味着将不再继承外部语句。有关详细信息,请参阅this document。 :