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

Docker+Django4.0+Nginx环境下登录出现403 CSRF验证失败求助

解决Django+Docker+Nginx环境下CSRF验证失败(403)的问题

以下是针对你遇到的CSRF 403错误的排查和解决步骤:

  • 检查Django的信任源配置
    在settings.py中,确保ALLOWED_HOSTS包含Nginx对外提供服务的主机名或IP,比如本地测试可设为ALLOWED_HOSTS = ['localhost', '127.0.0.1']。同时必须添加CSRF_TRUSTED_ORIGINS,指定Nginx的访问地址:

    CSRF_TRUSTED_ORIGINS = ['http://localhost', 'http://your-server-ip']
    # 若使用HTTPS,改为对应https开头的地址
    

    该配置用于让Django信任来自Nginx的请求,否则会直接拒绝CSRF验证。

  • 修正Nginx反向代理的请求头传递
    在你的Nginx配置文件中,处理Django请求的location块里,必须添加以下请求头配置,确保客户端的真实信息能正确传递给Django:

    location / {
        proxy_pass http://django:8000; # 此处的django对应docker-compose里的服务名称
        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;
    }
    

    同时在Django的settings.py中开启对应配置:

    USE_X_FORWARDED_HOST = True
    # 若使用HTTPS,添加下面一行
    SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
    
  • 检查CSRF和Session Cookie的设置

    • 本地测试(HTTP协议)时,确保settings.py中以下参数为False:
      CSRF_COOKIE_SECURE = False
      SESSION_COOKIE_SECURE = False
      
    • 生产环境使用HTTPS时,将上述两个参数设为True,同时确保CSRF_COOKIE_DOMAIN设置正确(比如你的域名.example.com)。
  • 验证模板中CSRF Token的渲染
    打开登录页面的源码,检查是否存在类似如下的隐藏字段:

    <input type='hidden' name='csrfmiddlewaretoken' value='xxxxxx'>
    

    如果未出现该字段,说明模板渲染存在问题——确认你的模板是否正确加载了Django的模板上下文,或是是否继承了包含{% csrf_token %}渲染逻辑的基础模板。

  • 确认Docker网络连通性
    检查docker-compose.yml中,Nginx和Django服务是否在同一个自定义网络中,示例配置如下:

    version: '3.8'
    services:
      django:
        ...
        networks:
          - app-network
      nginx:
        ...
        networks:
          - app-network
    networks:
      app-network:
        driver: bridge
    

    网络不通会导致请求转发异常,间接引发CSRF验证失败。

内容的提问来源于stack exchange,提问作者pietrus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:45:54