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:
Assurez-vous que tous vos jetons commencent par “X-”
exemple: “X-your-token”
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