web-dev-qa-db-fra.com

Ajouter et utiliser un en-tête (HTTP) dans nginx

J'utilise deux systèmes (les deux sont un équilibreur de charge Nginx et un agit en tant que système de sauvegarde).

Je veux ajouter et utiliser quelques en-têtes HTTP personnalisés.

Ci-dessous sont mes codes pour les deux;

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;"
    }
}

Système de sauvegarde

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

Comment puis-je y arriver?

41
mohan

Pour ajouter un en-tête, ajoutez simplement le code suivant au bloc d’emplacement où vous souhaitez ajouter l’en-tête:

location some-location {
  add_header X-my-header my-header-content;      
}

Évidemment, remplacez les contenus x-my-header et my-header-content par ce que vous souhaitez ajouter. Et c'est tout ce qu'il y a à faire.

91
cobaco

Vous pouvez utiliser des en-têtes en amont (nommés à partir de $ http_) et des en-têtes personnalisés supplémentaires. Par exemple:

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

ensuite, allez à la console et faites une requête avec l'en-tête de l'utilisateur:

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

la réponse contient X-Hdr-01, définie par le serveur et X-Upstream-01, définie par le 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
8
shcherbak