Je souhaite ajouter un en-tête personnalisé pour la réponse reçue du serveur derrière nginx.
Bien que add_header
fonctionne pour les réponses traitées par nginx, il ne fait rien lorsque le proxy_pass
est utilisé.
Je souhaite ajouter un en-tête personnalisé pour la réponse reçue du serveur derrière nginx.
Bien que add_header
fonctionne pour les réponses traitées par nginx, il ne fait rien lorsque le proxy_pass
est utilisé.
Réponses:
Il existe un module appelé HttpHeadersMoreModule qui vous donne plus de contrôle sur les en-têtes. Il n'est pas fourni avec Nginx et nécessite une installation supplémentaire. Avec lui, vous pouvez faire quelque chose comme ceci:
location ... {
more_set_headers "Server: my_server";
}
Cela "définira l'en-tête de sortie du serveur sur la valeur personnalisée pour tout code d'état et tout type de contenu". Il remplacera les en-têtes déjà définis ou les ajoutera s'ils ne sont pas définis.
Secure
et des HttpOnly
indicateurs sur un cookie de réponse ? Le cookie de réponse cible n'a cependant que le cookie name
et les expire
attributs.
add_header
fonctionne aussi bien avec proxy_pass
que sans. Je viens de mettre en place aujourd'hui une configuration dans laquelle j'ai utilisé exactement cette directive. Je dois admettre cependant que j'ai également eu du mal à mettre cela en place sans en rappeler exactement la raison.
À l'heure actuelle, j'ai une configuration de travail et elle contient les éléments suivants (entre autres):
server {
server_name .myserver.com
location / {
proxy_pass http://mybackend;
add_header X-Upstream $upstream_addr;
}
}
Avant nginx 1.7.5
add_header ne fonctionnait que sur les réponses réussies, contrairement au HttpHeadersMoreModule mentionné par Sebastian Goodman dans sa réponse .
Depuis nginx, 1.7.5
vous pouvez utiliser le mot-clé always
pour inclure des en-têtes personnalisés même dans les réponses d'erreur. Par exemple:
add_header X-Upstream $upstream_addr always;
Limitation: vous ne pouvez pas remplacer la server
valeur d'en-tête avec add_header
.
add_header X-Upstream $upstream_addr always;
X-Upstream: 10.10.10.10
vs X-Upstream: 53c2d28edefdf501ab7c92e02a0c1687
(md5 n'est probablement pas utile pour masquer l'infrastructure, mais il transmet l'idée).
add_header
directive. Vous n'avez pas du tout à les envoyer.
Comme l'écrit oliver:
add_header
fonctionne aussi bien avecproxy_pass
que sans.
Cependant, comme l'écrit Shane, à partir de Nginx 1.7.5, vous devez réussir always
pour se mettre add_header
au travail pour les réponses d'erreur, comme ceci:
add_header X-Upstream $upstream_addr always;
Vous pouvez essayer cette solution:
Dans votre location
bloc, lorsque vous utilisez, proxy_pass
faites quelque chose comme ceci:
location ... {
add_header yourHeaderName yourValue;
proxy_pass xxxx://xxx_my_proxy_addr_xxx;
# Now use this solution:
proxy_ignore_headers yourHeaderName // but set by proxy
# Or if above didn't work maybe this:
proxy_hide_header yourHeaderName // but set by proxy
}
Je ne suis pas sûr que ce soit exactement ce dont vous avez besoin, mais essayez une manipulation de cette méthode et peut-être que le résultat conviendra à votre problème.
Vous pouvez également utiliser cette combinaison:
proxy_hide_header headerSetByProxy;
set $sent_http_header_set_by_proxy yourValue;
location / { proxy_pass http://127.0.0.1:8080/; proxy_hide_header "Access-Control-Allow-Origin"; if ($http_origin ~* "^https://(example.com|www.example.com)$") { add_header Access-Control-Allow-Origin "$http_origin"; } }
L'ajout d'un en-tête avec add_header
fonctionne bien avec le proxy pass, mais s'il existe une valeur d'en-tête existante dans la réponse, elle empilera les valeurs.
Si vous souhaitez définir ou remplacer une valeur d'en-tête (par exemple, remplacez l'en- Access-Control-Allow-Origin
tête pour qu'il corresponde à votre client pour autoriser le partage de ressources entre origines), vous pouvez procéder comme suit:
# 1. hide the Access-Control-Allow-Origin from the server response
proxy_hide_header Access-Control-Allow-Origin;
# 2. add a new custom header that allows all * origins instead
add_header Access-Control-Allow-Origin *;
Ainsi proxy_hide_header
combiné avec add_header
vous donne le pouvoir de définir / remplacer les valeurs d'en-tête de réponse.
Une réponse similaire peut être trouvée ici sur ServerFault
Remarque: proxy_set_header
sert à définir les en-têtes de demande avant que la demande ne soit envoyée plus loin, pas à définir les en-têtes de réponse (ces attributs de configuration pour les en-têtes peuvent être un peu déroutants).