自建Sentry登录/找回密码时django.security.csrf跨域禁止错误求助
解决Sentry自托管登录/找回密码时的CSRF跨域禁止问题
问题原因
出现django.security.csrf: Forbidden (Origin checking failed)错误,核心原因是:
- 你配置的
system.url-prefix使用了IP地址,和实际访问的域名https://sentry.domain.com不一致 - Sentry(基于Django)未将你的访问域名加入CSRF可信源列表,导致POST请求(登录/找回密码)被拦截
解决方案
1. 修正系统访问前缀配置
编辑sentry/config.yml,将system.url-prefix改为实际访问的域名:
system.url-prefix: 'https://sentry.domain.com'
2. 添加CSRF可信源配置
编辑sentry/sentry.conf.py,添加或修改CSRF_TRUSTED_ORIGINS,将你的域名加入列表:
# 在文件中添加以下配置 CSRF_TRUSTED_ORIGINS = [ "https://sentry.domain.com" ]
注意:Django 3.2+版本要求该配置必须包含完整的协议(https/http)和域名,不能仅填写域名。
3. 检查Nginx的Host头转发配置
确保nginx/nginx.conf中正确转发Host头,添加或保留以下配置:
proxy_set_header Host $host;
这一步保证Django能正确识别请求的来源域名,避免CSRF验证时的不匹配。
4. 重启Sentry服务
执行命令重启所有Sentry容器,使配置生效:
docker-compose down && docker-compose up -d
内容的提问来源于stack exchange,提问作者manikh
相关产品推荐
相关产品推荐

