Nginx: How to add headers to only specific files and text
I have multiple urls that needs to add same sets of header with nginx. Here is the file names.
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/
So in this case File Group1 needs:
add_header Cache-Tag article-xyz;
And File Group2 needs:
add_header Cache-Tag article-abc;
So nginx.conf should be something like this
location /news/ {
add_header Cache-Tag article-abc;
}
But how can I apply this dynamically in add headers?
One solution is to use a map
directive on the $request_uri
value. For example:
map $request_uri $cache_tag {
default "";
~/article-xyz/ "article-xyz";
~/article-abc/ "article-abc";
}
server {
...
add_header Cache-Tag $cache_tag;
...
}
The map
block lives outside the server
block (as shown). The add_header
statement can be in the server
scope or in the location
block which finally processes the request (subject to inheritance rules). See this and this for details.
Do not use captures in the map
directive, as it will not work.