首页 > 解决方案 > 上游标头的 nginx 映射变为默认值

问题描述

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

配置:上游服务决定是否应该存在名为 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 解析就不需要它)

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

标签: nginxhttp-headers

解决方案


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

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

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

在您的配置中,您使用变量$http_x_no_iframe_protection,而您应该使用其中之一$sent_x_no_iframe_protection或可能$upstream_http_x_no_iframe_protection

所有 Nginx 变量都记录在这里


推荐阅读