nginx 中无法全局为不同路径设置默认状态码,但可通过 location 块配合 return 或 error_page 实现:return 直接返回指定状态码并终止处理;error_page 与 try_files 结合可将 404 转为其他状态码;catch-all location 可捕获未定义路径;return 仅限 server/location 块内使用,且状态码须为标准 http 码。

在 Nginx 中,无法直接为“不同路径”全局设置一个“默认返回状态码”,但可以通过 location 块配合 return 或 error_page 指令,对特定路径(或不匹配的路径)主动返回指定状态码。
用 return 指令直接返回指定状态码
这是最常用、最明确的方式。在对应 location 块中使用 return 状态码,Nginx 会立即终止处理并返回该状态码(可选带响应体)。
-
return 404;—— 返回纯 404,无响应体 -
return 403 "Access denied";—— 返回 403,并附带文本响应体 -
return 301 https://example.com/;$—— 支持重定向
例如,禁止访问 /admin/ 下所有路径:
location ^~ /admin/ {
return 403;
}
用 error_page + try_files 实现“兜底”返回
当希望某个路径下所有未命中真实文件的请求,统一返回特定状态码(如 410 Gone),可结合 try_files 和 error_page:
- 先用
try_files /nonexistent @missing;强制触发 404 - 再用
error_page 404 =410 /dev/null;把 404 转为 410 并丢弃响应体
示例:让 /legacy/ 下所有路径都返回 410:
location /legacy/ {
try_files /nonexistent @gone;
}
error_page 404 =410 /dev/null;
匹配“未定义路径”的兜底 location
利用最长前缀匹配和正则优先级,可设置一个 catch-all location 来捕获未被其他规则覆盖的路径:
-
location / { ... }是通用兜底,但可能被更具体的规则覆盖 -
location /api/ { ... }和location /static/ { ... }之外的请求,会落入location / - 若想仅匹配“完全未配置的路径”,可用
location ^~ /unused/ { return 451; }显式定义,而非依赖隐式兜底
注意 return 的作用范围和限制
return 只能在 server 或 location 块中使用,不能出现在 if 内(除非是 if 在 location 中且满足安全条件),且会终止当前请求处理流程。
- 状态码必须是标准 HTTP 状态码(如 204、401、405、429、503 等)
- 返回 204、301、302、307、4xx、5xx 均合法;返回 1xx 或非标准码(如 999)会导致 Nginx 启动失败
- 若需返回自定义错误页,应搭配
error_page和静态 HTML 文件,而非仅靠return











