How to avoid duplication of add_header directives in nginx?

The documentation says this:

These directives are inherited from the previous level if and only if there are no add_header directives defined on the current level.

My problem is that I have several location blocks that I want to cache, like this one:

add_header X-Frame-Options SAMEORIGIN;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";

location ~ ^/img/(.*)\.(png|jpg|jpeg|gif|bmp)$ {
    expires 1w;
    add_header Cache-Control public;
}

But that will make me lose all the headers declared outside of the block. So apparently the only way is duplicating those headers on every location block, eg:

add_header X-Frame-Options SAMEORIGIN;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";

location ~ ^/img/(.*)\.(png|jpg|jpeg|gif|bmp)$ {
    expires 1w;
    add_header Cache-Control public;
    add_header X-Frame-Options SAMEORIGIN;
    add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
}

Doesn't seem right. Any ideas?


Solution 1:

You're after the ngx_headers_more module: https://www.nginx.com/resources/wiki/modules/headers_more/

And yes, the behaviour of add_header is really irritating :)