Django 项目在 Nginx 上配置 HTTPS 证书的具体步骤是什么?

文章导读
在 Nginx 上为 Django 配置 HTTPS 需要获取 SSL 证书,修改 Nginx 监听 443 端口并加载证书文件,同时在 Django settings.py 中开启安全重定向设置。适用于生产环境部署,风险边界在于证书路径错误会导致服务不可用,防火墙未开放 443 端口会导致连接失败。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 常见坑
  6. F 常见问题
  7. G 参考来源
A A

在 Nginx 上为 Django 配置 HTTPS 需要获取 SSL 证书,修改 Nginx 监听 443 端口并加载证书文件,同时在 Django settings.py 中开启安全重定向设置。适用于生产环境部署,风险边界在于证书路径错误会导致服务不可用,防火墙未开放 443 端口会导致连接失败。

先说结论:配置核心在于 Nginx 监听与 Django 安全设置联动,确保加密传输与协议一致性。

  • 适合:生产环境正式上线,涉及用户数据提交的场景。
  • 先准备:域名解析生效,获取 SSL 证书文件(.crt/.pem 和.key)。
  • 验收:浏览器地址栏显示锁标志,HTTP 请求自动跳转至 HTTPS。

命令速用版

Nginx 配置文件 server 块核心片段:

server {
    listen 443 ssl;
    server_name www.your_domain.com;
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.key;
    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8001;
    }
}

Django settings.py 安全设置片段:

SECURE_SSL_REDIRECT = True
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")

为什么会这样

HTTPS 通过 TLS/SSL 加密层保护数据传输,防止密码和订单详情被窃听或篡改。Nginx 作为反向代理处理加密解密,Django 需要知道请求是通过安全协议到达的,否则可能产生重定向循环或静态文件加载错误。

Django 项目在 Nginx 上配置 HTTPS 证书的具体步骤是什么?

分步处理

1. 获取 SSL 证书:通过云服务商(如腾讯云、阿里云)申请免费或付费证书,或通过 Let's Encrypt 生成。下载后获得证书文件和私钥文件。

2. 上传证书文件:将证书文件上传至服务器指定目录,如/etc/nginx/cert/,确保 Nginx 进程有读取权限。

3. 修改 Nginx 配置:编辑 nginx.conf 或 sites-enabled 配置,监听 443 端口,指定 ssl_certificate 和 ssl_certificate_key 路径,配置 HTTP 到 HTTPS 重定向。

4. 修改 Django 配置:在 settings.py 末尾追加安全设置,开启 SECURE_SSL_REDIRECT 和 SECURE_PROXY_SSL_HEADER。

Django 项目在 Nginx 上配置 HTTPS 证书的具体步骤是什么?

5. 重启服务:执行 nginx -s reload 重启 Nginx,重启 Django 应用服务(如 uWSGI 或 Gunicorn)。

怎么验证是否生效

使用浏览器访问 https://域名,检查地址栏是否有安全锁标志。使用 curl -I http://域名 检查返回状态码是否为 301 或 302 跳转至 https。检查 Django 日志确认无 SSL 相关报错。

常见坑

1. 静态文件加载错误:HTTP 和 HTTPS 混合内容会导致浏览器拦截,需确保所有静态资源链接使用相对路径或强制 HTTPS。

2. 防火墙端口:云服务器安全组未开放 443 端口会导致无法访问,需在控制台放行 TCP 443。

Django 项目在 Nginx 上配置 HTTPS 证书的具体步骤是什么?

3. 重定向循环:若 Nginx 未正确传递 X-Forwarded-Proto 头,Django 可能误判协议导致无限重定向。

常见问题

免费 SSL 证书有效期多久?

通常免费证书有效期为 3 个月至 1 年,需在过期前续期,否则浏览器会报安全警告。

配置后 HTTP 无法自动跳转 HTTPS?

检查 Nginx 是否配置了 80 端口监听及 return 301 https://$host$request_uri 规则,或 Django 是否开启了 SECURE_SSL_REDIRECT。

自签名证书可以用吗?

自签名证书仅适合测试环境,生产环境浏览器会拦截,建议使用受信任 CA 颁发的证书。

参考来源

  • 如何在 Django 云服务器配置 Nginx 站点 SSL 证书 HTTPS 协议
  • Django 从 0 到 1 打造完整电商平台:HTTPS 配置与域名绑定
  • nginx 配置 https
  • 使用 Nginx 的 HTTPS SSL - Python 12 的 Django Web 开发
  • Django 云服务器配置 Nginx 站点 SSL 证书 HTTPS 协议
  • Django + Nginx https 部署实战 (第二辑)
  • Django + uWSGI + Nginx + https 项目部署,并用 OpenSSL 生成 https 证书
  • Django 教程:支持 HTTPS 访问及 Nginx 配置 SSL 证书
  • Django Nginx+uWSGI HTTPS 部署
  • 从开发到上线:Django 博客项目部署全流程 (Nginx+Gunicorn+HTTPS 实操)-CSDN 博客