我有一个配置文件,其配置类似于以下内容
map $request_uri $redirectWithError {
default "0"
"~* /<uri>" "1"
}
location / {
if ($redirectWithError = "1") {
return 404;
}
location / {
proxy_pass <another_address>
}
location /search {
proxy_pass <another_address>
}
}
我的假设是,当“if 语句”中的条件为真时,我们将返回 404 错误,并且不会执行包含 proxy_pass 的位置块。但从我的测试和观察来看,情况并非如此。即使在执行 if 语句后,位置块也会被执行。
有没有办法避免这里的位置块?即,如果“如果条件为真”,则返回 404,否则检查位置块内的情况。
PS:我已经经历过这个了Nginx 位置信息如何工作和如果是邪恶的了解 if 语句的内部工作原理。但我找不到任何博客详细说明 return 的工作原理
答案1
为什么要用 来if
检查 URI?这就是它location
的用途。
location / {
proxy_pass <another_address>;
}
location /search {
proxy_pass <another_address>;
}
location ~* /<uri> {
return 404;
}