使用nginx + passenger时丢失自定义http标头

时间:2011-05-07 10:16:48

标签: nginx passenger

我正在尝试为移动客户端的身份验证添加一些自定义http标头,例如

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

当我在开发中使用webrick / thin / mongrel时,它工作正常,但是当我使用nginx + passenger将其部署到生产服务器时,自定义标头会被删除,为什么?我该怎么办?

4 个答案:

答案 0 :(得分:9)

nginx中有一条指令要求忽略名称中包含“_”的标题。

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

这对我很有帮助,但重写你的软件以使用X格式可能会更好。

答案 1 :(得分:2)

尝试为自定义标头使用X风格命名。我在传递名为“device_id”的标题时遇到了这个问题。它会被剥离出nginx / Passenger层中的某个地方。我怀疑是乘客,但不确定。

我将标题更改为“X-device-id”,然后我的Rails控制器中的标题可用作request.headers ['X-device-id']。

答案 2 :(得分:0)

你需要做两件事:

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

    开头

    示例:“X-your-token”

  2. 配置nginx以通过此令牌:

    proxy_pass_header X-mobile-access-token;

答案 3 :(得分:0)

以防我与Apache(httpd-service)+ Passenger存在完全相同的问题,就像你们所有人一样,我所要做的就是改变" access_token" to" 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