Lorsque l'on utilise NGINX en tant que proxy, il y a quatre des ensembles d'en-têtes :
-
client -> nginx
: t demande en-têtes
-
nginx -> upstream
: l'amont demande en-têtes
-
upstream -> nginx
: l'amont réponse en-têtes
-
nginx -> client
: t réponse en-têtes
Il semble que votre question porte sur les en-têtes de réponse en amont. Ceux-ci se trouvent dans le fichier $upstream_http__name_
variables .
Cependant il faut tenir compte du fait que toute réponse Les en-têtes sont uniquement définis après les en-têtes de la réponse du serveur en amont ont été reçus. Tout if
directives sont exécutés avant d'envoyer la demande en amont et n'aura pas accès aux en-têtes de réponse ! En d'autres termes, if
sont exécutées après la réception de la demande du client, avant d'effectuer la demande en amont.
Si vous devez modifier la façon dont une réponse est gérée, vous pouvez utiliser un fichier de type map
directive cependant pour définir des variables basées sur les en-têtes de réponse, puis d'utiliser ces variables dans la section add_header
(définir les en-têtes de réponse du client), log_format
ou toute autre directive qui est active pendant les phases de réponse (nommée en interne les NGX_HTTP_CONTENT_PHASE
y NGX_HTTP_LOG_PHASE
phases ). Pour un contrôle plus complexe, vous devrez utiliser un module complémentaire de script tel que le module Module Lua (par exemple, en utilisant un header_filter_by_lua_block
directive ).
Pour lire ou définir des en-têtes individuels, utilisez :
de
à
type
lire (variable)
écrire (directive)
client
nginx
demande
$http__name_
-
ngnix
en amont
demande
-
proxy_set_header
en amont
nginx
réponse
$upstream_http__name_
-
nginx
client
réponse
$sent_http__name_
add_header
NGINX copie certains en-têtes de la requête du client vers la requête en amont, et de la réponse en amont vers la réponse du client, en utilisant différentes méthodes proxy_
directives , vous donnant la possibilité d'omettre ou d'inclure explicitement les en-têtes dans les deux sens. Ainsi, si un en-tête de réponse en amont se trouve uniquement dans $upstream_http__name_
alors ces en-têtes n'ont pas été copiés dans la réponse du client et l'ensemble des variables disponibles $sent_http__name_
comprendront toutes les variables extra les en-têtes définis par NGINX qui ne sont pas présents dans la réponse en amont.