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é.
nginx
http-headers
proxypass
Sorin
la source
la source
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:
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.
la source
Secure
et desHttpOnly
indicateurs sur un cookie de réponse ? Le cookie de réponse cible n'a cependant que le cookiename
et lesexpire
attributs.add_header
fonctionne aussi bien avecproxy_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):
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:Limitation: vous ne pouvez pas remplacer la
server
valeur d'en-tête avecadd_header
.la source
add_header X-Upstream $upstream_addr always;
X-Upstream: 10.10.10.10
vsX-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:
Cependant, comme l'écrit Shane, à partir de Nginx 1.7.5, vous devez réussir
always
pour se mettreadd_header
au travail pour les réponses d'erreur, comme ceci:la source
Vous pouvez essayer cette solution:
Dans votre
location
bloc, lorsque vous utilisez,proxy_pass
faites quelque chose comme ceci: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:
la source
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"; } }
Masquer l'en-tête de réponse, puis ajouter une nouvelle valeur d'en-tête personnalisée
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:Ainsi
proxy_hide_header
combiné avecadd_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
METTRE À JOUR:
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).la source