91

I am using two system (both are Nginx load balancer and one act as backup).

I want to add and use few HTTP custom headers.

Below is my code for both:

upstream upstream0 {
    #list of upstream servers
    server backend:80;
    server backup_load_balancer:777 backup;
    #healthcheck
}

server {
    listen 80;
    #Add custom header about the port and protocol  (http or https)
    server_name _;

    location / {
        # is included since links are not allowed in the post
        proxy_pass "http://upstream0;"
    }
}

Backup system

server {
    listen 777;
    server_name _;
    #doing some other extra stuff
    #use port and protocol to direct
}

How can I achieve that?

2
  • 1
    Why was this question closed? It clearly is on topic in my opinion, nginx absolutely falls into the category of “software tools primarily used by programmers”. This question about how to do the same thing with IIS has not been closed. Commented Jun 1, 2024 at 19:53
  • I believe it is because SO moderators are alternatively smart. Like and subscribe. Commented May 11 at 2:20

2 Answers 2

176

To add a header, add the add_header declaration to either the location block or the server block:

server {
   add_header X-server-header "my server header content!";
   location /specific-location {
       add_header X-location-header "my specific-location header content!";
   }
}

An add_header declaration within a location block will override the same add_header declaration in the outer server block. e.g. if location contained add_header X-server-header ... that would override the outer declaration for that path location.

Obviously, replace the values with what you want to add. And that's all there is to it.

Sign up to request clarification or add additional context in comments.

7 Comments

the $http_HEADER and $send_http_HEADER variables allow accessing the contents of a headers in nginx see wiki.nginx.org/HttpCoreModule#Variables
Does add_header work when proxy_pass is used? This question seems to contradict it: stackoverflow.com/questions/14501047/…
@cobaco This config adds this header into response header. is there any way to add in request header while sending it to proxy server ?
@IndraUprade Headers sent to the backend proxy server are managed with proxy_set_header: nginx.org/en/docs/http/…
Also add always at the end to have it work for 400 codes
|
17

You can use upstream headers (named starting with $http_) and additional custom headers. For example:

add_header X-Upstream-01 $http_x_upstream_01;
add_header X-Hdr-01  txt01;

next, go to console and make request with user's header:

curl -H "X-Upstream-01: HEADER1" -I http://localhost:11443/

the response contains X-Hdr-01, seted by server and X-Upstream-01, seted by client:

HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Mon, 30 Nov 2015 23:54:30 GMT
Content-Type: text/html;charset=UTF-8
Connection: keep-alive
X-Hdr-01: txt01
X-Upstream-01: HEADER1

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.