一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

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 块 中配置一次,全站生效:

  1. 确保全局 root 路径明确,例如 root /usr/share/nginx/html;
  2. 添加 error_page 映射,路径相对于 root:
    error_page 404 /error/404.html;error_page 500 502 503 504 /error/5xx.html;error_page 403 /error/403.html;
  3. 提前准备好对应文件,如 /usr/share/nginx/html/error/404.html
  4. 该方式不改状态码,适合 SEO 和调试,Nginx 内部重定向,无额外请求

统一 301 跳转到指定地址(如首页或新域名)

如果确实需要把所有错误请求(比如全部 404)都跳到 https://example.com/,必须用命名 location 中转,不能直接 return:

  1. 在 http 块中写:error_page 404 = @redirect_404;(注意 = 符号,表示内部跳转并重置状态码)
  2. 紧接着定义命名 location:
    location @redirect_404 {internal;return 301 https://example.com/;}
  3. internal 防止用户直接访问 @redirect_404 导致绕过逻辑
  4. 若想对多个错误码统一跳转,可写:error_page 404 500 502 503 504 = @redirect_error;

避免常见陷阱

实际配置中容易出错的点:

  1. return 301 直接写在 error_page 后面——语法错误,Nginx 启动失败
  2. 漏掉 =,写成 error_page 404 @notfound; → 只会内部重定向到 location,但状态码不变,不是跳转
  3. 在命名 location 里误用 rewrite ... permanent → 可能触发 rewrite cycle 循环错误
  4. root 或 alias 路径没配对,导致错误页 404 报错,最终显示空白或默认 Nginx 错误页

验证与生效

改完配置后别忘了:

  1. 运行 nginx -t 检查语法是否正确
  2. 执行 systemctl reload nginx(或 nginx -s reload)热加载
  3. 用 curl 测试:curl -I http://your-domain.com/nonexistent-path,看响应头是否为 404 + 正确 body,或 301 + Location 头

热门栏目