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

Django配置SECURE_SSL_REDIRECT=True后HTTPS重定向失败问题求助

问题根因

无限301重定向+超时问题的核心是反向代理和Django的HTTPS识别逻辑不匹配,以及可能的端口配置缺失,解决方案如下:


1. 配置反向代理转发正确的请求头

你部署时大概率用了Nginx/Apache做反向代理,处理HTTPS请求后转发HTTP请求到Django的8001端口,必须在代理配置中添加转发协议头的规则,以Nginx为例:

server {
    listen 443 ssl;
    server_name 你的实际域名;
    # 配置SSL证书路径
    ssl_certificate 你的证书pem文件路径;
    ssl_certificate_key 你的证书key文件路径;

    location / {
        proxy_pass http://127.0.0.1:8001;
        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;
    }
}
# 可选配置:80端口自动跳转HTTPS
server {
    listen 80;
    server_name 你的实际域名;
    return 301 https://$host$request_uri;
}

2. 补全Django settings.py配置

你已经配置了SECURE_PROXY_SSL_HEADER,还需要添加配置让Django信任代理转发的头:

# 加在settings.py末尾
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = True
# 生产环境请替换为你的实际域名,禁止用*
ALLOWED_HOSTS = ["你的实际域名"]

额外注意:你当前的CORS配置存在冲突,CORS_ALLOW_ALL_ORIGINS=True时CORS_ORIGIN_WHITELIST不会生效,且http://*的写法不符合规范,生产环境建议关闭CORS_ALLOW_ALL_ORIGINS,仅添加实际需要的跨域地址。

3. 检查端口开放情况

确认CentOS服务器的防火墙、云服务商安全组已经放开443端口访问权限:

# 检查firewalld是否开放443端口
firewall-cmd --list-ports
# 若没有则添加规则
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --reload

4. 排查测试步骤

  • 先清理浏览器缓存(301是永久重定向,会被浏览器长期缓存),或用无痕模式测试
  • 本地测试Django的头识别是否正常:执行curl -H "X-Forwarded-Proto: https" http://127.0.0.1:8001/admin/,如果返回200说明Django配置正常,问题出在反向代理
  • 测试公网HTTPS连通性:执行curl -v https://你的实际域名,排查证书、端口问题

生产环境不要直接用Django自带的runserver对外提供服务,建议使用Gunicorn/UWSGI作为应用服务容器,仅对内监听,由Nginx处理对外的HTTPS请求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:57:04