【问题标题】:lost custom http header when using nginx+passenger使用 nginx+passenger 时丢失了自定义 http 标头
【发布时间】:2011-05-07 10:16:47
【问题描述】:

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

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

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

【问题讨论】:

    标签: nginx passenger


    【解决方案1】:

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

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

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

    【讨论】:

    • apache+passenger 也是如此
    【解决方案2】:

    你需要做两件事:

    1. 确保所有标记都以“X-”开头

      示例:“X-your-token”

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

      proxy_pass_header X-mobile-access-token;

    【讨论】:

    • 看来nginx会通过X-headers,所以步骤2不需要。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      以防万一我遇到与 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-15
        • 2015-04-14
        • 1970-01-01
        相关资源
        最近更新 更多