理解 nginx 中的 Return

理解 nginx 中的 Return

我有一个配置文件,其配置类似于以下内容

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;
}

https://nginx.org/r/location

相关内容