You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:22:47