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
相关产品推荐
相关产品推荐

