【问题标题】:nginx map of header from upstream goes to default上游标头的 nginx 映射变为默认值
【发布时间】:2019-11-12 21:09:10
【问题描述】:

我想有一个基于我想从上游获取的标头的条件标头。 出于某种原因,它总是被翻译成默认值。

配置: 上游服务决定是否应该存在名为 x-no-iframe-protection 的标头。

主 nginx:

map $http_x_no_iframe_protection $x_frame_options {
    yes "";
    default "SAMEORIGIN";
}

server {
    ...
    add_header X-Frame-Options $x_frame_options;
    ...
}

无论我尝试什么 - 我都会得到两个标题:

$ curl -v myhost
...
< x-no-iframe-protection: yes
< x-frame-options: SAMEORIGIN
...

澄清一下 - 我使用 x-no-iframe-protection 作为在特定情况下删除 x-frame-options 的技巧。我可以保留它(尽管一旦被 nginx 解析就不需要它了)

无论如何 - 我怎样才能让它被捕获以替换标题值?

【问题讨论】:

  • here,我觉得这个问题和你的差不多。
  • $http_x_no_iframe_protection 是请求标头的值,您可能会遇到$sent_http_x_no_iframe_protection 是响应标头的值。
  • @RichardSmith - 成功了!请将您的评论表述为答案,以便我接受它

标签: nginx http-headers


【解决方案1】:

HTTP 事务包含请求标头和响应标头。根据您问题的上下文,您正在根据另一个 response 标头(从上游接收)的值设置响应标头的值。

Nginx 将请求标头存储在名称以 $http_ 开头的变量中,并将响应标头存储在名称以 $sent_ 开头的变量中。

此外,从上游接收到的响应头也可以存储在名称以$upstream_http_开头的变量中。

在您的配置中,您使用变量$http_x_no_iframe_protection,而您应该使用$sent_x_no_iframe_protection$upstream_http_x_no_iframe_protection

所有的 Nginx 变量都是documented here

【讨论】:

    【解决方案2】:

    尝试使用$upstream_x_no_iframe_protection 访问上游响应标头。

    【讨论】:

      猜你喜欢
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多