Django REST admin页本地可访问生产环境返回404,缺失什么配置?
可能遗漏的配置及排查方向
首先你其他API运行正常,说明Django服务本身的部署、反向代理转发基础配置是正常的,针对/admin生产环境404的问题,优先检查以下配置:
- admin应用加载的条件判断
检查settings.py的INSTALLED_APPS列表,是否把django.contrib.admin放在了DEBUG为真的条件分支里,比如类似下面的写法:
生产环境if DEBUG: INSTALLED_APPS += [ 'django.contrib.admin', 'django.contrib.staticfiles' ]DEBUG=False时会导致admin应用未被加载,对应路由自然失效,同理也检查你的urls.py是否加了类似的条件判断才注册admin路由。 - 自定义admin路径配置冲突
如果你修改过默认admin路径,比如在settings.py配置了ADMIN_URL参数,或者使用了第三方admin主题/增强插件修改了路由前缀,检查生产环境的环境变量、配置文件是否覆盖了该参数,导致实际的admin访问路径和你预期的/admin/不一致。 - 子路径部署配置缺失
如果你的Django项目生产环境是部署在域名的子路径下(比如所有请求前缀是/project/),需要在settings.py中添加配置FORCE_SCRIPT_NAME = "/你的子路径前缀",否则Django生成的路由会匹配不到带前缀的请求,此时正确的admin访问地址应该是https://你的域名/子路径前缀/admin/。 - 反向代理路径匹配规则问题
检查你使用的Nginx/Caddy等反向代理服务的配置,是否存在路径匹配的优先级问题,比如有没有规则把/admin开头的请求拦截后指向了其他静态资源目录,没有转发给Django服务。
排查小技巧:查看生产环境的Django运行日志,如果404日志出现在Django的日志中,说明请求已经到达Django服务,优先排查路由、应用加载相关的配置;如果404没有出现在Django日志中,说明请求在反向代理层就被拦截,优先检查反向代理配置。
内容的提问来源于stack exchange,提问作者mhkna
相关产品推荐
相关产品推荐

