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

Nginx+Gunicorn部署Django时allauth登录跳转127.0.0.1报错如何解决?

问题根源

Django生成重定向URI时默认使用请求到达应用层的Host、协议信息,你当前Nginx反向代理没有传递原始请求的域名、协议等头信息,导致Django拿到的请求源是127.0.0.1:8000,因此生成的回调地址和Google后台配置的不一致。

具体解决步骤

1. 修改Nginx配置,补充代理头参数

你之前注释掉了代理头相关配置,需要在反向代理时把原始请求的域名、协议等信息传递给后端Gunicorn。修改/etc/nginx/conf.d/default.conf的location /块:

location / {
    proxy_pass http://127.0.0.1:8000;
    # 传递原始请求的Host头(即你配置的域名my.domain.com)
    proxy_set_header Host $host;
    # 传递原始请求的客户端IP
    proxy_set_header X-Real-IP $remote_addr;
    # 传递原始请求的协议(http/https,后续配置SSL也可复用)
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

修改完成后校验配置并重载Nginx生效:

nginx -t
systemctl reload nginx

2. 修改Django配置文件settings.py

需要让Django信任Nginx传递的代理头,使用传递的信息生成站点URL:

  • 配置允许访问的HOST:
ALLOWED_HOSTS = ['my.domain.com']
  • 新增代理头信任配置:
# 启用X-Forwarded-Host头识别
USE_X_FORWARDED_HOST = True
# 后续配置HTTPS后需新增以下配置识别HTTPS协议
# SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

3. 核对Google后台回调地址

Google要求回调地址必须带完整协议头,需要确认后台配置的回调地址为http://my.domain.com/auth/google/login/callback/(后续配置HTTPS后要同步改为https开头),和Django生成的地址完全一致。

4. 重启服务生效

重启Gunicorn服务让Django配置生效:

systemctl daemon-reload
systemctl restart gunicorn

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:06:01