Using add_header at server level context

From the add_header docs I understand that it works at location, http
and
server context. But when I use add_header at the server level I don’t
see
the headers being added to the response.

For example my server config starts with:

server {
listen 9088;
server_name localhost;
tcp_nodelay on;

etag              on;
access_log        on;

add_header X-AppServer $upstream_addr;
add_header X-AppServer-Status $upstream_status;
add_header X-Cache $upstream_cache_status;

Am I missing something or is this just not working at the server level
for
some reason?

On Mon, Sep 30, 2013 at 03:42:50PM +0200, Thijs K. wrote:

Hi there,

From the add_header docs I understand that it works at location, http and
server context. But when I use add_header at the server level I don’t see
the headers being added to the response.

Am I missing something or is this just not working at the server level for
some reason?

You’re missing something.

You’re either missing that if the second argument to add_header expands
to empty, then the header is not added; or that configuration directive
inheritance is by replacement, not addition.

==
server {
listen 8080;
add_header X-Server server-level;
add_header X-Surprise $http_surprise;

location /one {
  return 200 "location one";
}
location /two {
  return 200 "location two";
  add_header X-Location two;
}

}

Compare the outputs you actually get from

curl -i http://127.0.0.1:8080/one

curl -i http://127.0.0.1:8080/two

curl -i -H Surprise:value http://127.0.0.1:8080/one

with what you expect to get.

f

Francis D. [email protected]

Thanks. So using add_header in the location scope omits any earlier
add_header statements used in the parent scope. I am surprised that it
works like that, but it’s definitely good to know.