在 nginx 的 server 块中实现快速响应,最直接的方法是使用 return 指令配合状态码和可选的响应体。该指令会立即终止请求处理流程并返回结果,跳过后续的 rewrite、proxy_pass 等复杂逻辑,从而显著降低延迟。例如,配置 return 200 'ok'; 即可让服务器直接返回 200 状态码及指定内容。

return 指令在不同状态码下的行为差异是什么
return 指令根据状态码的不同,表现出不同的响应行为。对于 3xx 重定向状态码,Nginx 会自动设置 Location 头;对于 2xx 或 4xx/5xx 错误状态码,则主要关注状态码本身和可选的响应体。理解这些差异有助于正确配置快速响应策略。

server {
listen 80;
server_name example.com;
# 快速返回 200 OK
location /health {
return 200 'Service is healthy';
}
# 快速返回 301 重定向
location /old-path {
return 301 https://example.com/new-path;
}
# 快速返回 404 Not Found
location /missing {
return 404 'Resource not found';
}
}
上述配置展示了三种常见场景:健康检查返回 200,路径重定向返回 301,以及资源缺失返回 404。每个 location 块中的 return 都会立即生效,无需进一步处理。
如何结合变量动态生成响应内容
除了固定文本,return 指令还支持使用 Nginx 内置变量来动态生成响应内容。这使得可以根据请求的具体属性(如 URI、主机名、时间戳等)返回个性化的快速响应,增强了配置的灵活性。

server {
listen 80;
server_name example.com;
location /dynamic {
set $timestamp $time_local;
return 200 "Current time: $timestamp";
}
}
在这个例子中,$time_local 变量被用于构建响应体。每次请求 /dynamic 时,Nginx 都会获取当前时间并返回,而不会进行任何后端代理或文件查找操作。这种动态响应方式依然保持了 return 指令的高效性。
当 return 与 error_page 同时存在时如何处理
当 return 指令与 error_page 指令共存时,return 的优先级更高。如果 return 明确指定了状态码,即使该状态码触发了 error_page 规则,Nginx 也会优先执行 return 的逻辑。这意味着 error_page 无法覆盖由 return 产生的响应。
server {
listen 80;
server_name example.com;
error_page 404 /custom_404.html;
location /test {
return 404 'Custom 404 message';
}
}
在上述配置中,尽管定义了 error_page 404,但访问 /test 时,Nginx 会直接返回 return 指定的 'Custom 404 message',而不是加载 /custom_404.html。这是因为 return 指令在处理流程中更早阶段就被执行,直接结束了请求处理。











