应用宕机时Nginx未返回指定maintenance.html,求排查配置问题
问题分析与修复方案
你的Nginx配置存在两个关键问题,导致后端宕机时无法返回指定的维护页面:
1. 未开启后端错误拦截
默认情况下,Nginx会直接将后端返回的5xx错误响应转发给客户端,不会触发你定义的error_page规则。必须添加proxy_intercept_errors on;指令,让Nginx拦截这些错误状态码,转而执行你配置的错误处理逻辑。
2. 静态文件路径可能错误
你在@maintenance块中指定的root /var/html并非Nginx默认的静态文件目录,绝大多数场景下正确路径应为/var/www/html。如果该路径不存在或maintenance.html未放在此目录下,Nginx无法找到文件,会返回404错误,最终显示默认错误页。
修正后的完整配置
server { listen 443 ssl; ssl_certificate /root/certs/cert.crt; ssl_certificate_key /root/certs/cert.key; server_name example.com; error_page 500 501 502 503 504 505 506 507 508 510 511 @maintenance; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://localhost:3000; # 开启后端错误拦截,触发error_page规则 proxy_intercept_errors on; } location @maintenance { # 修正静态文件根目录路径 root /var/www/html; # 确保维护页面存在时返回200状态码,避免客户端显示错误状态 try_files /maintenance.html =200; } }
额外验证步骤
- 确认
/var/www/html/maintenance.html文件存在,且Nginx进程对该文件有读取权限(可执行chmod 644 /var/www/html/maintenance.html确保权限正确)。 - 修改配置后执行
nginx -s reload重新加载配置,测试后端宕机时的响应。
内容的提问来源于stack exchange,提问作者EugeneKannou
相关产品推荐
相关产品推荐

