在重置请求 header 时重写 URL - nginx
Rewrite a URL while resetting a request header - nginx
我正在尝试将亲戚 URL“/A”重写为“/B”,同时还设置请求 header。 url /A 已经暴露给一些客户。 /B 本质上是 /A,Accept header 设置为 "json"。我正在尝试从上游删除 /A 支持,而只在上游添加 /B 。但我需要继续支持/A。因此问题
我能够成功重写,但是 header 没有设置。
location = /A {
proxy_set_header Accept "json"
rewrite /A /B;
}
location = /B {
... a lot of configurations here ...
proxy_pass http://my_upstream;
}
以下对我有用,但我看到 nginx 对自己发出了一个额外的请求,这不是很酷。
location = /A {
proxy_set_header Accept "json"
proxy_pass http://127.0.0.1:$server_port/B;
}
location = /B {
... a lot of configurations here ...
proxy_pass http://my_upstream;
}
有什么建议吗?
location = /A {
set $accept "json";
rewrite /A /B;
}
location = /B {
proxy_set_header Accept $accept;
... a lot of configurations here ...
proxy_pass http://my_upstream;
}
如果空字符串作为 proxy_set_header
第二个参数传递,nginx 根本不会设置 header。如果您的请求不会被 location = /A
块捕获,$accept
变量将在 location = /B
块处具有空值。
更新
如果请求被第二个位置块捕获,上面给出的配置将清除 Accept
HTTP header。如果你想保留它,你可以使用更复杂的配置:
map $accept $accept_header {
"" $http_accept;
default $accept;
}
server {
...
location = /A {
set $accept "json";
rewrite /A /B;
}
location = /B {
proxy_set_header Accept $accept_header;
... a lot of configurations here ...
proxy_pass http://my_upstream;
}
...
}
我正在尝试将亲戚 URL“/A”重写为“/B”,同时还设置请求 header。 url /A 已经暴露给一些客户。 /B 本质上是 /A,Accept header 设置为 "json"。我正在尝试从上游删除 /A 支持,而只在上游添加 /B 。但我需要继续支持/A。因此问题
我能够成功重写,但是 header 没有设置。
location = /A {
proxy_set_header Accept "json"
rewrite /A /B;
}
location = /B {
... a lot of configurations here ...
proxy_pass http://my_upstream;
}
以下对我有用,但我看到 nginx 对自己发出了一个额外的请求,这不是很酷。
location = /A {
proxy_set_header Accept "json"
proxy_pass http://127.0.0.1:$server_port/B;
}
location = /B {
... a lot of configurations here ...
proxy_pass http://my_upstream;
}
有什么建议吗?
location = /A {
set $accept "json";
rewrite /A /B;
}
location = /B {
proxy_set_header Accept $accept;
... a lot of configurations here ...
proxy_pass http://my_upstream;
}
如果空字符串作为 proxy_set_header
第二个参数传递,nginx 根本不会设置 header。如果您的请求不会被 location = /A
块捕获,$accept
变量将在 location = /B
块处具有空值。
更新
如果请求被第二个位置块捕获,上面给出的配置将清除 Accept
HTTP header。如果你想保留它,你可以使用更复杂的配置:
map $accept $accept_header {
"" $http_accept;
default $accept;
}
server {
...
location = /A {
set $accept "json";
rewrite /A /B;
}
location = /B {
proxy_set_header Accept $accept_header;
... a lot of configurations here ...
proxy_pass http://my_upstream;
}
...
}