Nginx proxy_pass覆盖由rewrite指令更改的URL
从下面引用的nginx中,我了解到Nginx proxy_pass覆盖由rewrite指令更改的URL,nginx,url-rewriting,proxypass,Nginx,Url Rewriting,Proxypass,从下面引用的nginx中,我了解到proxy\u pass指令不会更改URI,只会将重写的URI传递给服务器 使用rewrite指令在代理位置内更改URI时,此配置将用于处理请求(中断): 在这种情况下,将忽略指令中指定的URI,并将完全更改的请求URI传递给服务器 但是当我将proxy\u pass设置为变量时,URI被覆盖 例如: location /test_rewrite { set $ups_addr http://upstream_server; rewrite
proxy\u pass
指令不会更改URI,只会将重写的URI传递给服务器
- 使用rewrite指令在代理位置内更改URI时,此配置将用于处理请求(中断): 在这种情况下,将忽略指令中指定的URI,并将完全更改的请求URI传递给服务器
proxy\u pass
设置为变量时,URI被覆盖
例如:
location /test_rewrite {
set $ups_addr http://upstream_server;
rewrite /test_rewrite /test_rewrite_upstream break;
proxy_pass $ups_addr/random_string;
}
URI/test\u rewrite
正在被重写为/random\u string
有人能帮我理解这种行为的原因吗 同以下文件所述:
- 在代理过程中使用变量时:
在这种情况下,如果在指令中指定了URI,它将按原样传递给服务器,替换原始请求URIlocation /name/ { proxy_pass http://127.0.0.1$request_uri; }
location /test_rewrite {
set $ups_addr http://upstream_server;
rewrite /test_rewrite /test_rewrite_upstream break;
proxy_pass $ups_addr;
}
结果字符串不包含URI部分,传递给上游服务器的URI是/test\u rewrite\u upstream
location /test_rewrite {
set $ups_addr http://upstream_server/;
rewrite /test_rewrite /test_rewrite_upstream break;
proxy_pass $ups_addr;
}
结果字符串包含一个URI部分(注意$ups\u addr
变量末尾的尾随斜杠),传递给上游服务器的URI是/
您可以使用$uri
变量将重写规则与proxy\u pass
指令中的自定义uri部分组合起来:
location /test_rewrite {
set $ups_addr http://upstream_server;
rewrite /test_rewrite /test_rewrite_upstream break;
proxy_pass $ups_addr/random_string$uri;
}
在这种情况下,传递给上游服务器的URI是/random\u string/test\u rewrite\u upper
location /test_rewrite {
set $ups_addr http://upstream_server/;
rewrite /test_rewrite /test_rewrite_upstream break;
proxy_pass $ups_addr;
}
要保留请求参数,请使用和变量:
location /test_rewrite {
set $ups_addr http://upstream_server;
rewrite /test_rewrite /test_rewrite_upstream break;
proxy_pass $ups_addr$uri$is_args$args;
}
@你确定你没有误删除我的报价吗?我标记了一条来自nginx的引文(我的编辑中也包含了该链接),以便将其与OP的文本分开。哦,这是我的错。我正在浏览审查队列,它看起来有点凌乱,所以我试图清理它,但我没有完全意识到上下文。回复。