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

Nginx配置Certbot后跳转HTTPS正常但无法重定向到Django服务器怎么办

问题根因
  • 你的Nginx 443端口配置块中多了一行无意义的301跳转规则,且没有配置任何反向代理逻辑,所有HTTPS请求要么进入跳转死循环,要么根本没有被转发到Django服务
  • Django默认启动命令仅监听本地127.0.0.1的8000端口,没有Nginx的转发规则的话外部流量无法访问到Django服务
修正方案

1. 替换Nginx配置

删除原有冗余配置,替换为以下内容,修改完成后执行nginx -s reload重载配置生效:

# 统一处理所有HTTP请求,直接跳转HTTPS
server {
    listen 80 default_server;
    server_name wavera.ru www.wavera.ru _;
    return 301 https://$host$request_uri;
}

# 处理HTTPS请求,转发到Django服务
server {
    listen 443 ssl;
    server_name wavera.ru www.wavera.ru;

    # 保留原有Certbot自动生成的SSL配置
    ssl_certificate /etc/letsencrypt/live/www.wavera.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.wavera.ru/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # 反向代理核心配置,将流量转发到本地Django服务
    location / {
        proxy_pass http://127.0.0.1:8000;
        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;
    }
}

2. 调整Django配置与启动方式

  • 打开Django项目的settings.py文件,添加/修改以下配置:
# 允许你的域名访问Django服务
ALLOWED_HOSTS = ['wavera.ru', 'www.wavera.ru', '127.0.0.1']
# 让Django识别Nginx转发的HTTPS请求,避免资源加载错误
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
  • 开发测试场景下,使用以下命令启动Django,确保Nginx可以正常访问到服务:
    python3 manage.py runserver 0.0.0.0:8000

注意:runserver是Django自带的开发调试服务器,性能和安全性都不满足生产环境要求,生产环境请使用Gunicorn、uWSGI等专业应用服务器托管Django服务

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:15:05