web-dev-qa-db-fra.com

En-tête personnalisé vers l'avant du proxy inverse Nginx

J'ai un serveur Web nginx agissant comme un proxy inverse pour transmettre les demandes à Apache pour une gestion supplémentaire (je vous prie de ne pas demander pourquoi). J'ai une demande à laquelle j'essaie de joindre un en-tête personnalisé et j'aimerais que nginx transmette cet en-tête personnalisé à Apache afin que je puisse faire quelque chose avec dans une application.

J'ai fouillé dans les documents HttpProxyModule, mais ils ne sont pas très descriptifs même si je suis au bon endroit (il se pourrait très bien que je ne le sois pas).

Comment puis-je demander à nginx de transmettre un X-CUSTOM-REFERRER entête? De plus, si possible, j'aimerais qu'il transmette le long tout en-tête personnalisé qui entre. Si ce dernier est trop demander, le premier suffit pour mon besoin actuel.

Comme vous pouvez le voir, je suis très nouveau sur nginx, donc la version corrective serait utile.

Merci.

MISE À JOUR

L'extrait pertinent de ma configuration existante:

location / {
    proxy_pass                  http://preview;
    proxy_redirect              off;
    proxy_set_header            Host $Host;
    proxy_set_header            X-Real-IP $remote_addr;
    proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;
    # proxy_set_header            X-Custom-Referrer $x_custom_referrer;
}
27
Rob Wilkerson

Le proxy_set_header directive de la HttpProxyModule vous permet de le faire. Par exemple:

proxy_pass http://apachehost;
proxy_set_header X-Custom-Referrer $proxy_add_<header_field_name_from_last_request>;
21
mgorven

Le module ngx_headers_more vous permet de modifier et d'ajouter des en-têtes http.

2
Yohann

Vous pouvez utiliser des en-têtes en amont (nommés en commençant par $ 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 dans la console et faites une demande 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éfini par le serveur et X-Upstream-01, défini 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
1
shcherbak

Par défaut, le nginx transmet tous les (proxy_pass_request_headers on;) l'en-tête au serveur principal. Mais si votre en-tête de demande (peut être un en-tête personnalisé) inclut un trait de soulignement (_) dans le nom de l'en-tête, alors nginx bloque ces en-têtes.

Ex: authenticate_type, cdn_enable.

Pour permettre à Nginx de transmettre tout ou l'en-tête demandé personnalisé au backend, activez l'option de soulignement.

underscores_in_headers on;
0
GangaRam Dewasi