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

问题描述 投票:0回答:4

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

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

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

nginx passenger
4个回答
10
投票

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

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

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


2
投票

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

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


1
投票

您需要做两件事:

  1. 确保您的所有令牌均以
    X-
  2. 开头
     example: "X-your-token"
  1. 配置 nginx 通过此令牌传递:
    proxy_pass_header X-mobile-access-token;

0
投票

以防万一我对 Apache (httpd-service) + Passenger 遇到完全相同的问题,就像你们所有人一样,我所要做的就是将“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
© www.soinside.com 2019 - 2024. All rights reserved.