正确配置Nginx自定义404页面需三步:一是在server块内写error_page 404 /404.html;二是配置location = /404.html { root /var/www/html; internal; };三是确保文件≥512字节、有读权限且mime.types已加载。

要在 Nginx 的 server 块中正确配置自定义 404 页面并引导用户访问,关键不是简单加一行 error_page,而是让 Nginx 能“接管” 404 错误、找到页面、安全返回——三者缺一不可。
确保 error_page 指令写在生效的 server 块里
它必须位于处理主站请求的 server { } 内部,而不是嵌套在某个 location /api 之类的作用域中。否则只对子路径生效,首页 404 仍走默认页。
- 静态站点常见写法:
error_page 404 /404.html; - 可同时配置多个状态码:
error_page 404 500 502 /404.html; - 路径是 URI 路径(以
/开头),不是磁盘绝对路径
必须声明 location = /404.html 并设 internal
仅靠 error_page 不足以响应 /404.html 这个 URI,Nginx 需要明确知道怎么定位和提供这个文件。
- 示例配置:
location = /404.html {<br> root /var/www/html;<br> internal;<br>} -
root值会与 URI 拼接,即实际读取/var/www/html/404.html -
internal防止用户直接访问https://yoursite.com/404.html,只允许内部错误跳转使用 - 务必确认该文件真实存在,且 Nginx 工作进程(如
www-data)有读权限(chmod 644)
注意文件大小和 MIME 类型
Nginx 对自定义错误页有隐式要求,忽略会导致回退到默认白页。
- 文件内容不能少于 512 字节,否则被忽略。可用命令快速补足:
echo '<h1>Not Found</h1>' $(printf '%*s' 500) > /var/www/html/404.html - 确保
mime.types已加载(通常配置里有include mime.types;),使.html正确识别为text/html - 若用
alias替代root,注意路径拼接逻辑更易出错,推荐统一用root
反向代理场景要额外开启拦截开关
如果 404 来自后端(如 Node.js、Flask、Tomcat),Nginx 默认透传状态码,error_page 不触发。
- 在对应
location块内添加:proxy_intercept_errors on; - 且
error_page 404 /404.html;必须也写在这个location内,不能只放在server顶层 - PHP-FPM 场景则用:
fastcgi_intercept_errors on;


















