Django部署后子URL及Admin面板返回404错误排查求助
Django部署问题排查与解决方案
1. 反向代理服务器(Nginx/Apache)路由规则问题
这是子URL返回404的最常见原因,代理服务器未将非静态文件请求转发给Django服务:
- Nginx配置检查:确保所有非静态/媒体路径的请求都转发到WSGI服务(如Gunicorn),避免仅匹配根路径:
错误示例:使用server { listen 80; server_name mannyebi.com; # 静态文件直接由Nginx提供 location /static/ { alias /绝对路径/到/你的/static目录/; } # 媒体文件同理 location /media/ { alias /绝对路径/到/你的/media目录/; } # 核心:所有其他请求转发给Django location / { proxy_pass http://127.0.0.1:8000; # 对应WSGI服务的绑定端口/套接字 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }location = /(带等号)只会匹配根路径,子URL不会被转发。 - Apache配置检查:确保
ProxyPass规则覆盖所有路径:# 排除静态/媒体路径,直接由Apache提供 ProxyPass /static/ ! ProxyPass /media/ ! # 所有其他请求转发给Django ProxyPass / http://127.0.0.1:8000/ ProxyPassReverse / http://127.0.0.1:8000/
2. ALLOWED_HOSTS配置错误(DEBUG=False时的核心问题)
当DEBUG=False时,Django会严格校验请求的Host头,未配置正确域名会导致不完整响应:
- 修改
settings.py:
同时确保反向代理服务器传递了正确的ALLOWED_HOSTS = ['mannyebi.com', 'www.mannyebi.com'] # 临时测试可使用['*'],但生产环境禁止Host头(如Nginx的proxy_set_header Host $host;),否则Django无法识别合法域名。
3. WSGI服务(Gunicorn/uWSGI)配置问题
- 确认服务使用项目的虚拟环境启动,且绑定端口/套接字正确:
启动Gunicorn的正确命令示例:gunicorn --bind 127.0.0.1:8000 你的项目名.wsgi:application - 检查服务状态:
systemctl status gunicorn(若用systemd管理),排查是否有启动报错或进程异常。 - 确认
wsgi.py文件路径正确,且application对象正常导出。
4. Django URLconf加载验证
虽然本地正常,仍需确认服务器端路由配置:
- 检查主
urls.py是否正确包含子应用路由:from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('blogs/', include('blogs.urls')), # 确保子应用路由已引入 path('', include('home.urls')), # 根路径路由 ] - 确认服务器端
urls.py与本地版本完全一致,无路由冲突或遗漏。
5. DEBUG=False时的静态文件配置
关闭DEBUG后,Django不再提供静态文件,需确保:
- 已执行静态文件收集命令:
python manage.py collectstatic settings.py中STATIC_ROOT指向正确目录,且反向代理服务器的静态文件路径与此匹配:STATIC_ROOT = '/绝对路径/到/收集后的/static目录/' STATIC_URL = '/static/'
6. 文件权限问题
确保WSGI服务运行用户(如www-data)对项目目录、静态/媒体目录有对应权限:
sudo chown -R www-data:www-data /你的项目根目录/ sudo chmod -R 755 /你的项目根目录/ # 媒体目录需额外开放写权限 sudo chmod -R 775 /你的媒体目录/
内容的提问来源于stack exchange,提问作者Manny
相关产品推荐
相关产品推荐

