nginx 的 error_page 404 /404.html 触发内部重定向,需配合 location = /404.html { internal; root /usr/share/nginx/html; } 处理,确保文件存在且权限正确,并避免外部直接访问或资源路径错误。

在 Nginx 的 server 块中使用 error_page 指令,可以将 404 状态重定向到自定义页面(如 /404.html),但要注意:它不是简单地“返回”该文件,而是触发一次内部重定向,需配合 location 块处理路径解析。
基本配置写法
在 server 块内添加:
error_page 404 /404.html;
这行表示:当发生 404 时,Nginx 内部跳转到 URI /404.html(注意是 URI,不是文件路径)。接下来必须确保该 URI 能被正确响应,通常靠下面的 location 匹配。
必须配合 location 块提供静态响应
仅写 error_page 不够,Nginx 需要知道如何响应 /404.html 这个请求。推荐用 location = /404.html 显式匹配:
- location = /404.html { internal; root /usr/share/nginx/html; }
-
internal表示该 location 只能被内部重定向访问(防止用户直接请求/404.html暴露路径) -
root指定文件根目录,Nginx 会拼接为/usr/share/nginx/html/404.html - 确保该 HTML 文件真实存在且有读取权限
常见错误与避坑点
- 漏写
location块 → 请求卡住或返回空页/默认 404 - 用
alias时末尾斜杠不匹配:比如alias /var/www/error/;对应/404.html,则文件路径是/var/www/error/404.html;若写成alias /var/www/error(缺斜杠),结果会出错 - 自定义页面含相对路径资源(如
css/style.css)→ 浏览器仍按原 URL(如/abc/xyz)解析,导致样式丢失;建议用绝对路径(/css/style.css)或<base href="/>%0A%20%20 - %E6%9C%AA%E8%AE%BE%20
internal%20%E2%86%92%20%E5%A4%96%E9%83%A8%E5%8F%AF%E7%9B%B4%E8%AE%BF%20/404.html%EF%BC%8C%E5%8F%AF%E8%83%BD%E6%9A%B4%E9%9C%B2%E9%94%99%E8%AF%AF%E9%A1%B5%E7%BB%93%E6%9E%84%E6%88%96%E5%BD%B1%E5%93%8D%20SEO %0A
%E8%BF%9B%E9%98%B6%EF%BC%9A%E7%BB%9F%E4%B8%80%E9%94%99%E8%AF%AF%E9%A1%B5%20+%20%E7%8A%B6%E6%80%81%E7%A0%81%E9%80%8F%E4%BC%A0
%0A%E5%A6%82%E6%9E%9C%E6%83%B3%E8%AE%A9%E6%89%80%E6%9C%89%E9%94%99%E8%AF%AF%E9%A1%B5%E5%85%B1%E7%94%A8%E4%B8%80%E4%B8%AA%20HTML%20%E5%B9%B6%E4%BF%9D%E7%95%99%E5%8E%9F%E5%A7%8B%E7%8A%B6%E6%80%81%E7%A0%81%EF%BC%88%E5%A6%82%E4%BB%8D%E8%BF%94%E5%9B%9E%20404%20%E8%80%8C%E9%9D%9E%20200%EF%BC%89%EF%BC%8C%E5%8F%AF%E8%BF%99%E6%A0%B7%E5%86%99%EF%BC%9A
%0A
error_page 404 /error.html?code=404; 在
location = /error.html { internal; root /usr/share/nginx/html; }
error.html 中用 JS 或服务端逻辑读取 code 参数动态渲染内容。注意:Nginx 本身不解析 HTML,状态码仍需靠 error_page 触发时保持原样(默认即保持)。











