生产环境无效URL显示内部服务器错误而非自定义404页面
问题排查指南
日志记录含义
你提供的请求日志代表:运行Ubuntu X64系统的客户端使用火狐92.0版本浏览器,向服务端发起了GET请求访问路径/session/987567865850/,服务端最终返回500状态码(内部服务器错误),响应内容长度为141字节,请求来源页为空。
这条日志说明:当你访问无效URL时,服务端没有正常触发404处理逻辑,反而在处理请求的过程中抛出了异常,所以才会展示Internal Server Error而不是自定义404页面。
故障排查步骤
- 首先确认生产环境的根路由
urls.py中已经正确声明自定义错误处理器,本地开启DEBUG模式时即使不配置handler也会走默认调试页,关闭DEBUG的生产环境必须显式声明:
# 放在根urls.py的顶层,替换为你的实际应用名 handler404 = 'app名.views.handler404' handler500 = 'app名.views.handler500'
- 检查
maintenance/error404.html文件是否已同步部署到生产环境,路径匹配项目的模板查找规则,文件无读取权限问题。 - 排查
error404.html模板是否存在语法错误:本地开启DEBUG时模板渲染的容错性更高,生产环境模板标签引用错误、变量不存在等问题都会直接触发500。 - 确认生产环境的Django版本和本地开发版本一致,部分低版本Django对handler404的入参要求有差异,参数不匹配会导致处理器调用失败。
- 可以临时在handler404中加入日志打印逻辑,定位是否是处理器本身执行出错。
内容的提问来源于stack exchange,提问作者ElMaestroDeToMare
相关产品推荐
相关产品推荐

