nginx return 指令可立即终止请求并返回指定http状态码及可选响应体,适用于重定向、权限拦截等场景;支持server/location/if块,语法为return code [text]或return code url,优先级高于error_page。

Nginx 中的 return 指令可直接终止当前请求处理,并向客户端返回指定 HTTP 状态码(及可选响应体)。它比 rewrite ... break 或 error_page 更简洁高效,适用于简单重定向、权限拦截、维护页面等场景。
基本语法与状态码支持
return 指令支持两类用法:
-
仅状态码:如
return 403;,Nginx 返回标准错误页(如 403 Forbidden) -
状态码 + 响应体:如
return 200 "OK\n";,Nginx 返回纯文本响应,不加载任何模板或日志模块
支持常见状态码(1xx–5xx),但注意:301 和 302 必须配合 URL 使用(如 return 302 https://example.com/;),否则会报配置错误。
常用使用位置与作用域限制
return 可出现在以下上下文中:
-
server 块:对整个虚拟主机生效,适合全局维护页(如
return 503 "Site under maintenance";) -
location 块:最常用,用于路径级控制(如禁止访问敏感路径:
location /admin/ { return 404; }) -
if 块内:可结合变量做条件判断(如
if ($args ~ "debug=1") { return 400 "Debug disabled"; })
⚠️ 注意:return 在 if 中虽可用,但应避免复杂逻辑;Nginx 官方建议优先用 map 预计算变量再配合 return。
返回自定义响应体的注意事项
当指定响应体时:
- 响应体内容默认为
text/plain类型,不自动添加Content-Type头 - 若需 JSON,应手动设置头:
add_header Content-Type application/json;(放在return前) - 响应体中的换行符需显式写为
\n,例如:return 200 "{\n\"status\":\"ok\"\n}"; - 响应体长度受
client_max_body_size影响较小,但过长可能触发缓冲限制,建议保持简短
与 error_page 的关键区别
return 是主动立即响应,而 error_page 是被动捕获后续产生的错误:
-
return 403;—— 立刻返回 403,不执行后续指令,不记录为“错误” -
error_page 403 /403.html;—— 先执行完整请求流程,遇到 403 才跳转到指定页面 - 若同时配置,
return优先级更高,会绕过error_page处理链
因此,需要快速拦截或统一响应时,return 更轻量可靠。











