Nginx:如何仅向特定文件和文本添加标头

Nginx:如何仅向特定文件和文本添加标头

我有多个 URL 需要使用 nginx 添加相同的标头集。以下是文件名。

File Group1
    https://www.example.com/news/2017-08-03/article-xyz/
    https://www.example.com/news/2017-08-03/article-xyz/topics/
    https://www.example.com/news/2017-08-03/article-xyz/gallery/

File Group2
    https://www.example.com/news/2017-08-02/article-abc/
    https://www.example.com/news/2017-08-02/article-abc/topics/
    https://www.example.com/news/2017-08-02/article-abc/gallery/

因此在这种情况下文件组 1 需要:

add_header Cache-Tag  article-xyz;

文件组 2 需要:

add_header Cache-Tag  article-abc;

所以 nginx.conf 应该是这样的

  location /news/ {
        add_header Cache-Tag  article-abc;
    }

但是如何在添加标题时动态应用它?

答案1

一种解决方案是使用值map上的指令$request_uri。例如:

map $request_uri $cache_tag {
    default        "";
    ~/article-xyz/ "article-xyz";
    ~/article-abc/ "article-abc";
}
server {
    ...
    add_header Cache-Tag $cache_tag;
    ...
}

map位于server块之外(如图所示)。语句add_header可以在范围内,也可以在最终处理请求的块server中(受继承规则约束)。请参见location了解详情。

不要在map指令中使用捕获,因为它不起作用。

相关内容