Nginx server块中配置403和500错误页面需用error_page指令内部映射至本地HTML文件,保持原状态码;须配合location块放行路径(如location = /error/403.html { }),文件须置于root目录下且权限正确,避免绝对路径与外部资源依赖。
在 Nginx 的 server 块中配置自定义 403 和 500 错误页面,关键不是“重定向”(即 302 跳转),而是用 error_page 指令将错误响应内部映射到本地静态 HTML 文件,并确保该文件能被正确返回。
error_page 不是 HTTP 重定向,而是 Nginx 内部的响应替换:当发生对应状态码(如 403 或 500)时,Nginx 会停止原请求处理流程,改而返回你指定的页面内容,状态码仍保持原值(仍是 403 或 500)。这是符合 HTTP 规范且对 SEO/调试友好的做法。
在 server 块内添加如下指令:
error_page 403 /error/403.html;error_page 500 502 503 504 /error/50x.html;这两行表示:遇到 403 错误时返回 /error/403.html;遇到任意一种 5xx 错误时统一返回 /error/50x.html。路径是相对于 root 指令所设的根目录的。
仅写 error_page 不够——Nginx 需要能正常响应这个路径,否则可能触发二次错误。需显式声明:
location = /error/403.html { }location = /error/50x.html { }如果 root 是 /usr/share/nginx/html,那这两个 HTML 文件就得放在 /usr/share/nginx/html/error/ 下,且 Nginx 进程有读取权限。不需要额外加 root 或 alias,只要路径与 root 匹配即可。
error_page(如 error_page 403 /var/www/error/403.html),容易因权限或路径解析失败导致空白页或 500location;更稳妥的做法是把样式内联、图片转 base64try_files(如 try_files $uri $uri/ =404),它不会干扰 error_page 403,但会影响 404 的触发逻辑,两者独立生效mime.types 已加载,或在 http 块中显式设置 types { text/html html; }