Django项目SSL证书获取与HTTPS配置指南

云舒
云舒
发布时间:2026-10-14| 3人浏览过
原创

本文详解Django项目上线时的HTTPS配置流程。涵盖从申请单域名DV SSL证书、Nginx反向代理及SSL证书路径配置,到Django settings.py中SecurityMiddleware关键参数的设置。通过三步操作实现HTTP至HTTPS的永久重定向,保障数据传输安全。

为什么网站需要支持HTTPS协议?

简单来说,HTTPS等同于HTTP加上SSL协议,旨在提供更安全的数据传输机制。

HTTP(超文本传输协议)是Web浏览器与服务器间传递信息的主流方式,但其主要缺陷在于以明文形式发送内容(含用户密码等敏感信息),缺乏数据加密保护。若攻击者截获传输数据,可直接读取其中内容。

为消除这一隐患并确保数据传输安全,HTTPS(安全套接字层超文本传输协议)应运而生。它在HTTP基础上集成了SSL协议,利用证书验证服务器身份,并对浏览器与服务器间的通信数据进行加密处理。

需注意:HTTP默认使用80端口,而HTTPS默认使用443端口。若使用云服务器,务必在安全组设置中开放443端口访问权限。

如何在Django生产环境中配置HTTPS?

整个过程主要分为三个步骤:

1. 购买并下载SSL证书,通常包含一份证书文件(.cert或.pem格式)和一个私有密钥文件(.key格式)。

2. 修改Nginx或Apache的配置信息,并将下载的SSL证书及密钥上传至服务器指定目录。

3. 修改Django项目的配置文件settings.py,添加相关安全设置。

第一步:购买并下载SSL证书

SSL证书种类繁多,级别越高价格越贵,市场上免费的优质资源较少。对于个人网站,使用单域名DV SSL证书通常已足够。例如,阿里云在活动期间提供免费申请机会。购买时选择“单域名-DV SSL-免费版”即可,具体操作可参考相关图示。若需购买收费版,namecheap是性价比相对较高的选择。

无论选择哪家SSL证书服务商,最终都会提供证书下载链接或将证书发送至邮箱,具体流程因服务商而异。随后,需将下载的证书上传至服务器指定文件夹,详见下一步操作。

第二步:修改Nginx配置信息

在Django生产环境部署中,通常使用Nginx作为反向代理和静态文件服务器。此处简要说明Nginx的配置方法。Nginx配置文件一般位于/etc/nginx/conf.d目录下,需修改配置文件以添加SSL相关设置。


# /etc/nginx/conf.d目录下的配置文件
server {
listen 443 ssl; 监听443端口
ssl_certificate /path/to/certificate/your_domain_chain.crt; # 证书地址
ssl_certificate_key /path/to/your_private.key; # 私有密钥文件地址
server_name your_domain.com www.your_domain.com; # 域名
}

SSL证书和私有密钥文件可上传至服务器任意指定目录,但常规做法是将其放置于Linux系统的/usr/share/nginx/ssl目录下。因此,上述配置信息可简化为如下形式:


# /etc/nginx/conf.d目录下的配置文件
server {
listen 443 ssl; 监听443端口
ssl_certificate /usr/share/nginx/ssl/your_domain_chain.crt; # 证书地址
ssl_certificate_key /usr/share/nginx/ssl/your_private.key; # 私有密钥文件地址
server_name your_domain.com www.your_domain.com; # 域名
}

此外,还可以配置将所有来自80端口的HTTP请求永久重定向至HTTPS。


server {
listen 80; # 监听80端口
server_name your_domain.com www.your_domain.com;
return 301 https://$server_name$request_uri; # 永久重定向
}

第三步:修改Django的settings.py

当网站支持HTTPS后,可在settings.py中新增以下安全配置,从而为网站及用户数据提供更高级别的保护。这些设置也是Django Cookiecutter模板推荐的生产环境默认配置。


# SECURITY安全设置 - 支持http时建议开启
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
SECURE_SSL_REDIRECT = True # 将所有非SSL请求永久重定向到SSL
SESSION_COOKIE_SECURE = True # 仅通过https传输cookie
CSRF_COOKIE_SECURE = True # 仅通过https传输cookie
SECURE_HSTS_INCLUDE_SUBDOMAINS = True # 严格要求使用https协议传输
SECURE_HSTS_PRELOAD = True # HSTS为
SECURE_HSTS_SECONDS = 60
SECURE_CONTENT_TYPE_NOSNIFF = True # 防止浏览器猜测资产的内容类型

注意:Django中的SECURE_SSL_REDIRECT = True也可实现将80端口的HTTP请求永久重定向至HTTPS,此设置与Nginx中的301重定向二选一即可。上述几个安全设置均依赖于SecurityMiddleware中间件。


MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
]

小结

Django项目上线时配置HTTPS非常简单,仅需上述三个步骤。你是否已掌握?

以上是关于Django项目如何获取SSL证书并配置HTTPS的详细内容,更多相关技术资料请查阅本站其他文章。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。