web-dev-qa-db-fra.com

nginx - lit l'en-tête personnalisé du serveur en amont

J'utilise nginx en tant que proxy inverse et j'essaie de lire un en-tête personnalisé à partir de la réponse d'un serveur en amont (Apache) sans succès. La réponse Apache est la suivante:

HTTP/1.0 200 OK
Date: Fri, 14 Sep 2012 20:18:29 GMT 
Server: Apache/2.2.17 (Ubuntu)
X-Powered-By: PHP/5.3.5-1ubuntu7.10
Connection: close
Content-Type: application/json; charset=UTF-8
My-custom-header: 1

Je veux lire la valeur de My-custom-header et l'utiliser dans une clause if:

location / {
    // ...
    // get My-custom-header value here
    // ...
}

Est-ce possible? Merci d'avance.

63
luis

$ http _ name_of_the_header_key

c'est-à-dire si vous avez Origin = domain.com dans l'en-tête, vous pouvez utiliser $http_Origin pour obtenir " domain.com"

En nginx prend en charge le champ d'en-tête de demande arbitraire. Dans l'exemple ci-dessus, la dernière partie du nom d'une variable est le nom du champ converti en minuscule, les tirets étant remplacés par des traits de soulignement.

Référence doc ici: http://nginx.org/en/docs/http/ngx_http_core_module.html#var_http_

Pour votre exemple, la variable serait $http_my_custom_header.

70
cobaco

Je faisais face au même problème. J'ai essayé les deux $http_my_custom_header et $sent_http_my_custom_header mais ça n'a pas fonctionné pour moi.

Bien que résolu ce problème en utilisant $upstream_http_my_custom_header.

39
Dev Gosain

Utilisez $ http_MY_CUSTOM_HEADER

Vous pouvez écrire quelque chose comme

set my_header $http_MY_CUSTOM_HEADER;
if($my_header != 'some-value') {
#do some thing;
}
6
Vladimir