使用nginx +乘客时丢失自定义http头

我试图添加一些自定义的http头来从移动客户端authentication,如

{'MOBILE_KEY'=>'xxx','MOBILE_SIGNATURE'=>'yyy'}

当我在开发中使用webrick / thin / mongrel的时候,它工作的很好,但是当我用nginx + passenger将它部署到生产服务器时,自定义标题被删除,为什么呢? 我能做些什么?

nginx中有一个指令,表示忽略名称中带有“_”的标头。

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

这帮助了我,但是重写你的软件来使用X-格式可能会更好。

尝试使用自定义标题的X-风格命名。 当传递一个名为“device_id”的头文件时,我遇到了这个问题。 它会在nginx / Passenger层的某处被剥离出来。 我怀疑这是乘客,但不知道。

我把头文件改为“X-device-id”,头文件在我的Rails控制器中作为request.headers ['X-device-id']提供给我。

你需要做两件事情:

  1. 确保所有的令牌都以“X-”开头

    例如:“X-your-token”

  2. 配置nginx来传递这个令牌:

    proxy_pass_header X-mobile-access-token;

以防万一我与Apache(httpd-service)+乘客有完全相同的问题,就像你们所有我所要做的就是把“access_token”改为“access-token”

 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