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;
}
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>;
Le module ngx_headers_more vous permet de modifier et d'ajouter des en-têtes http.
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
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;