perdu l’en-tête http lors de l’utilisation de nginx + passagers

J’essaie d’append des en-têtes http personnalisés pour l’authentification du client mobile, comme

{‘MOBILE_KEY’ => ‘xxx’, ‘MOBILE_SIGNATURE’ => ‘yyy’}

Lorsque je travaille avec webrick / thin / mongrel en développement, cela fonctionne bien, mais quand je l’ai déployé sur le serveur de production avec nginx + passagers, les en-têtes personnalisés sont supprimés, pourquoi? et que puis-je faire?

Il y a une directive dans nginx qui dit d’ignorer les en-têtes avec un ‘_’ dans le nom.

http://nginx.org/en/docs/http/ngx_http_core_module.html#underscores_in_headers

Cela m’a aidé, mais réécrire votre logiciel pour utiliser le format X peut être encore meilleur.

Essayez d’utiliser le nommage de style X pour vos en-têtes personnalisés. J’ai rencontré ce problème en passant un en-tête nommé “device_id”. Il serait éliminé quelque part dans la couche nginx / passager. Je pense que c’était Passenger, mais pas sûr.

J’ai changé l’en-tête en “X-device-id” et l’en-tête était alors disponible dans mon contrôleur Rails en tant que request.headers [“X-device-id”].

Vous devrez faire deux choses:

  1. Assurez-vous que tous vos jetons commencent par “X-”

    exemple: “X-your-token”

  2. Configurez nginx pour transmettre ce jeton via:

    proxy_pass_header X-mobile-access-token;

Juste au cas où j’aurais exactement le même problème avec Apache (httpd-service) + Passenger et comme vous tous, il suffisait de remplacer “access_token” par “access-token” à partir de

 curl --header "access_token:MnRj6qCefRc8NuYzcBvhUvRreEGVvxh9yuNe0XcOIoEA==" --data "uuid=cef8dfa1ae6cab68d8bd47e8137707ee" http://localhost/website/transactions/pull-latest 

à

 curl --header "access-token:MnRj6qCefRc8NuYzcBvhUvRreEGVvxh9yuNe0XcOIoEA==" --data "uuid=cef8dfa1ae6cab68d8bd47e8137707ee" http://localhost/website/transactions/pull-latest