我希望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_*
变量?
答案 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:):