J'utilise Nginx en tant que proxy pour filtrer les demandes de mon application. Avec l'aide de "http_geoip_module", je crée un en-tête http de code de pays et je souhaite le transmettre comme en-tête de requête à l'aide de "en-têtes-more-nginx-module". Voici le bloc d’emplacement dans la configuration de Nginx:
location / {
proxy_pass http://mysite.com;
proxy_set_header Host http://mysite.com;;
proxy_pass_request_headers on;
more_set_headers 'HTTP_Country-Code: $geoip_country_code';
}
Mais cela ne définit que l'en-tête dans la réponse. J'ai essayé d'utiliser "more_set_input_headers" au lieu de "more_set_headers" mais l'en-tête n'est même pas transmis à la réponse.
Qu'est-ce que j'oublie ici?
Si vous souhaitez transmettre la variable à votre serveur proxy, vous devez la définir avec le module proxy.
location / {
proxy_pass http://example.com;
proxy_set_header Host example.com;
proxy_set_header HTTP_Country-Code $geoip_country_code;
proxy_pass_request_headers on;
}
Et maintenant, il est passé au serveur proxy.
Le problème est que les traits de soulignement '_' ne sont pas valides dans l'attribut d'en-tête. Si la suppression du trait de soulignement n'est pas une option, vous pouvez ajouter au bloc du serveur:
underscores_in_headers on;
Il s’agit essentiellement d’un copier-coller du commentaire de @ kishorer747 sur la réponse de @Fleshgrinder, et la solution provient de: https://serverfault.com/questions/586970/nginx-is-not-forwarding-a-header-value -when-using-proxy-pass/586997 # 586997
Je l'ai ajouté ici car, dans mon cas, l'application derrière nginx fonctionnait parfaitement, mais dès que ngix se situait entre mon flask app et le client, mon flask L’application ne verrait plus les en-têtes, c’était un peu fastidieux de déboguer.