【问题标题】:nginx - read custom header set on clientnginx - 读取客户端上设置的自定义标头
【发布时间】:2018-12-04 11:11:41
【问题描述】:

我使用 nginx 作为反向代理。我正在尝试读取客户端上设置的自定义标头,因此我可以使用该标头的值更新变量。

我在 XHR 请求中设置了类似于 xhr.setRequestHeader('X-My-Custom-Variable', "1"); xhr.setRequestHeader('X-My-Second-Custom-Variable', 'some-value');

从文档中,我看到我可以在 nginx 上实现这一点:

if ($http_x_my_custom_variable = ‘1’) {
    set $variable $http_x_my_second_custom_variable;
}

但是,当我运行它时,这不起作用,$variable 没有设置。

我也尝试过像这样使用 nginx map 关键字:

map $http_x_my_custom_variable $variable {
   default “”;
   “1” $http_x_my_second_custom_variable;
}

仍然没有任何反应。

我还确认两个标头都设置为我在后端 Django 服务器上所期望的。

注意:我的实际标题名称看起来更像:X-ABM-ZHR-XAVIER。我只是说这只是因为它可能与标题名称的结构有关。虽然我也尝试了不同的标题名称排列以防万一。

【问题讨论】:

  • 问题可能是我们没有输入“if 语句”吗?这意味着 $http_x_my_custom_variable 实际上没有设置为“1”?
  • 我不这么认为。我确认后端的标头设置为“1”。

标签: nginx http-headers


【解决方案1】:

尽量不要在变量名中使用任何破折号。

从客户端传递 XMyCustomVariable 并在 nginx 上使用 $http_XMyCustomVariable(或小写)读取它。

我知道这并不优雅,但作为调试的第一步,我会确认这部分。

另外,尝试使用已知变量名称之一(再次用于调试),例如在用户代理标头中发送变量 1 值并使用 $http_user_agent 检查 nginx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-19
    • 2011-03-11
    • 2021-02-09
    • 2012-09-08
    • 2014-02-06
    • 2023-02-14
    • 2022-12-15
    • 2016-02-10
    相关资源
    最近更新 更多