最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Linux 如何配置 Nginx 将所有错误请求统一重定向
时间:2026-09-04 18:14:48 编辑:袖梨 来源:一聚教程网
Linux下Nginx统一处理错误请求分两类:返回静态错误页(如error_page 404 /error/404.html,保持原状态码)或301跳转(需error_page 404 = @redirect_404配合internal命名location)。
在 Linux 上用 Nginx 实现“所有错误请求统一重定向”,核心是区分两类需求:一类是返回统一错误页面(如 404.html),另一类是把错误请求真正跳转到新 URL(比如 301 跳首页)。两者写法不同,不能混用。
统一返回静态错误页(推荐默认方式)
这是最常用、最安全的做法:保持原始状态码(如 404 仍是 404),但展示同一套友好页面。只需在 http 块 中配置一次,全站生效:
- 确保全局 root 路径明确,例如
root /usr/share/nginx/html; - 添加 error_page 映射,路径相对于 root:
error_page 404 /error/404.html;error_page 500 502 503 504 /error/5xx.html;error_page 403 /error/403.html;
- 提前准备好对应文件,如
/usr/share/nginx/html/error/404.html - 该方式不改状态码,适合 SEO 和调试,Nginx 内部重定向,无额外请求
统一 301 跳转到指定地址(如首页或新域名)
如果确实需要把所有错误请求(比如全部 404)都跳到 https://example.com/,必须用命名 location 中转,不能直接 return:
- 在 http 块中写:
error_page 404 = @redirect_404;(注意 = 符号,表示内部跳转并重置状态码) - 紧接着定义命名 location:
location @redirect_404 {internal;return 301 https://example.com/;} -
internal防止用户直接访问 @redirect_404 导致绕过逻辑 - 若想对多个错误码统一跳转,可写:
error_page 404 500 502 503 504 = @redirect_error;
避免常见陷阱
实际配置中容易出错的点:
- 把
return 301直接写在 error_page 后面——语法错误,Nginx 启动失败 - 漏掉
=,写成error_page 404 @notfound;→ 只会内部重定向到 location,但状态码不变,不是跳转 - 在命名 location 里误用
rewrite ... permanent→ 可能触发 rewrite cycle 循环错误 - root 或 alias 路径没配对,导致错误页 404 报错,最终显示空白或默认 Nginx 错误页
验证与生效
改完配置后别忘了:
- 运行
nginx -t检查语法是否正确 - 执行
systemctl reload nginx(或nginx -s reload)热加载 - 用 curl 测试:
curl -I http://your-domain.com/nonexistent-path,看响应头是否为 404 + 正确 body,或 301 + Location 头