nginx send_http标头变量不正确

时间:2018-11-12 15:40:19

标签: http nginx

我希望nginx根据后端的响应标头更改其行为。

我的后端(也是nginx)返回一个Foo标头:

HTTP/1.1 200 OK
Server: nginx/1.15.5
Foo: true

如果设置了Foo标头,我想更改行为。

如果我使用以下配置,则$sent_http_foo似乎并不真实,也没有设置标题。

if ($sent_http_foo) {
  add_header "Foo-Header-Set" "true";
}

但是,如果我改用此配置:

add_header "Foo-Header-Value" "$sent_http_foo";

我在响应中看到带有true的新标题。

是否可以通过这种方式使用$sent_http_*变量?

1 个答案:

答案 0 :(得分:1)

这是一个很旧的邮件列表,但是与您的问题有关-Nginx mailing

在邮件列表中,您可以阅读-

  

您提到的“ set”和“ if”指令均在之前执行   一个请求被发送到上游。   此时,响应中没有foo标头。   “ if”或“ set”指令将不起作用,这就是   导致您看到的行为。

此外,您可以进一步了解If Is Evil

  

如果在位置上下文中使用if时出现问题,则在某些情况下,它没有达到您的期望,而是完全不同。在某些情况下,它甚至存在段错误。通常最好避免这种情况。

总而言之-您的操作方式完全可以:

URI::InvalidURIError (bad URI(is not URI?): ://steinmann.s3-us-east-2.amazonaws.com:):