Fargate部署Django+Nginx时如何配置allauth的OAuth回调域名
问题原因
allauth生成OAuth回调地址时,读取的是Django侧感知到的请求域名和协议。当前架构中Nginx反向代理到本地8011端口的Django服务时,没有透传原始请求的域名、协议头,同时Django没有配置信任反向代理层,导致Django误将自身监听的127.0.0.1识别为对外访问域名,最终生成了无法访问的回调地址。
修复步骤
1. Django配置调整
所有修改都在项目的settings.py中完成:
- 配置允许访问的主机列表,加入你的对外域名:
ALLOWED_HOSTS = ["example.com"] - 配置Django信任反向代理传递的请求头:
# 读取反代透传的真实Host USE_X_FORWARDED_HOST = True # 如果对外提供HTTPS服务,加这行识别真实协议,纯HTTP服务可以去掉 SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') - 修正站点配置:
登录Django后台,找到Sites(站点)模块,将默认站点的域名从127.0.0.1或者默认的示例域名改成你真实的对外域名example.com,同时确认settings.py中的SITE_ID参数对应该条站点记录的ID。 - 检查allauth基础配置:确认
ACCOUNT_DEFAULT_HTTP_PROTOCOL参数和对外服务协议一致,HTTPS服务设为"https",HTTP服务设为"http"。
2. Nginx配置调整
修改Nginx的反向代理规则,透传原始请求的核心头信息给后端Django,不要把代理用的本地地址传给后端:
location / { proxy_pass http://127.0.0.1:8011; # 透传原始请求域名 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 透传原始请求协议(HTTP/HTTPS) proxy_set_header X-Forwarded-Proto $scheme; }
如果你在Fargate服务前挂载了AWS ALB负载均衡,默认ALB会自动透传上述头信息,不需要额外修改ALB配置,只要保证Nginx不要覆盖这些头即可。
配置完成后重载Nginx、重启Django/uWSGI服务,再触发OAuth登录流程时,allauth就会自动生成example.com/callback/xxx格式的正确回调地址。
内容的提问来源于stack exchange,提问作者whitebear
相关产品推荐
相关产品推荐

