当前位置: 首页 > news >正文

Django 从 0 到 1 打造完整电商平台:HTTPS 配置与域名绑定

IT策士 10余年一线大厂经验,专注 IT 思维、架构、职场进阶。我会在公众号、今日头条持续发布最新文章,助你少走弯路。


上一篇我们用 Docker 把整个电商平台容器化了,几条命令就能在任何服务器上跑起来。但还有一个问题:用户浏览器地址栏里显示的仍然是http://,访问时会有“不安全”的提示。对于处理用户支付、账号密码的电商网站来说,这绝对不行。

今天我们就来完成上线前的最后一步——配置 HTTPS 加密访问,并绑定自己的域名。我会带你从域名解析开始,到申请免费的 SSL 证书,再到 Nginx 配置自动续期,让用户通过https://www.你的域名.com安全地浏览和下单,彻底达到生产标准。


一、为什么一定要 HTTPS?

HTTP 协议是明文传输的,请求和响应在网络上“裸奔”。任何人都可以在路由器、网关等节点截获数据,看到用户的密码、订单详情,甚至注入广告或恶意代码。

HTTPS 通过在 HTTP 和 TCP 之间加上TLS/SSL 加密层,实现了三重保护:

  1. 加密通信:数据在传输过程中被加密,无法被窃听。

  2. 身份认证:证书由受信任的 CA(证书颁发机构)签发,确保你访问的是真实的网站,而非假冒网站。

  3. 数据完整性:防止数据在传输过程中被篡改。

电商网站处理用户登录、支付,HTTPS 是强制性要求。支付宝的支付回调也强制要求 HTTPS。


二、域名准备与解析

2.1 购买域名

在阿里云(万网)、腾讯云 DNSPod、GoDaddy 等平台购买一个域名。假设我们买的域名是myecommercestore.com

2.2 DNS 解析

登录域名管理控制台,添加两条 A 记录,将域名指向你的服务器公网 IP:

  • @代表myecommercestore.com(裸域名)

  • www代表www.myecommercestore.com

保存后,等待 DNS 解析生效(通常几分钟到几小时,可以通过ping 你的域名检查是否已解析到服务器 IP)。

pingmyecommercestore.com

控制台输出:

PING myecommercestore.com(123.456.789.0):56data bytes64bytes from123.456.789.0:icmp_seq=0ttl=64time=1.234ms

如果显示你服务器的 IP,说明解析已生效。


三、使用 Let’s Encrypt 获取免费 SSL 证书

Let’s Encrypt 是免费的、自动化的证书颁发机构,被全球广泛信任。其客户端工具certbot可以自动获取和续期证书。

3.1 Nginx 直接部署方案(第 27 篇方式)

如果你使用第 27 篇的 Nginx + uWSGI 直接部署方式(非 Docker),按以下步骤操作。

安装 Certbot 和 Nginx 插件:

sudoaptupdatesudoaptinstall-ycertbot python3-certbot-nginx

获取证书并自动修改 Nginx 配置:

sudocertbot--nginx-dmyecommercestore.com-dwww.myecommercestore.com

按提示输入邮箱(用于证书到期提醒),同意服务条款。

控制台输出:

Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator nginx, Installer nginx Obtaining a new certificate Performing the following challenges: http-01 challengeformyecommercestore.com http-01 challengeforwww.myecommercestore.com Waitingforverification... Cleaning up challenges Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/django_ecommerce Redirecting all traffic on port80to sslin/etc/nginx/sites-enabled/django_ecommerce - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations!You have successfully enabled HTTPS on https://myecommercestore.com and https://www.myecommercestore.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Certbot 自动修改了 Nginx 配置,将所有 HTTP 请求重定向到 HTTPS,并添加了 SSL 证书配置。

检查自动续期:

Let’s Encrypt 证书有效期 90 天,Certbot 安装时会自动添加一个 systemd timer 定期续期。

sudocertbot renew --dry-run

如果无错误,表示自动续期已正常工作。

3.2 Docker Compose 部署方案(第 28 篇方式)

如果使用 Docker,我们可以在 docker-compose 中增加一个certbot服务来获取证书,并在 Nginx 容器中挂载证书。

步骤一:创建 certbot 目录和配置

在项目根目录创建certbot/目录用于存放证书和验证文件。

mkdir-pcertbot/conf certbot/www

步骤二:修改 docker-compose.yml

在 services 中增加certbot服务,并修改 Nginx 配置,添加证书挂载。

services:# ... 其他服务保持不变 ...nginx: image: nginx:1.25 container_name: ecom_nginx ports: -"80:80"-"443:443"# 开放 443 端口volumes: - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf - static_volume:/app/staticfiles - media_volume:/app/media - ./certbot/conf:/etc/letsencrypt# 证书目录- ./certbot/www:/var/www/certbot# ACME 验证目录depends_on: - web restart: unless-stopped certbot: image: certbot/certbot container_name: ecom_certbot volumes: - ./certbot/conf:/etc/letsencrypt - ./certbot/www:/var/www/certbot entrypoint:"/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"

步骤三:修改 Nginx 配置

更新nginx/nginx.conf,添加 HTTPS server 块,并增加.well-known/acme-challenge路径用于证书验证:

# HTTP server(用于证书验证和强制跳转 HTTPS)server{listen80;server_name myecommercestore.com www.myecommercestore.com;location /.well-known/acme-challenge/{root /var/www/certbot;}location /{return301https://$host$request_uri;}}# HTTPS serverserver{listen443ssl;server_name myecommercestore.com www.myecommercestore.com;ssl_certificate /etc/letsencrypt/live/myecommercestore.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/myecommercestore.com/privkey.pem;include /etc/letsencrypt/options-ssl-nginx.conf;ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;location /static/{alias/app/staticfiles/;expires 30d;}location /media/{alias/app/media/;expires 7d;}location /{proxy_pass http://web: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;}client_max_body_size 10M;}

步骤四:首次获取证书

先启动 Nginx(不带 SSL 配置,因为我们还没有证书文件,可以先注释掉 443 部分,只保留 80 和验证路径,待证书获取后再启用完整配置)。

更简单的做法:使用一个临时的初始化脚本来获取证书。

创建一个init-letsencrypt.sh

#!/bin/bashdomains=(myecommercestore.com www.myecommercestore.com)email="admin@myecommercestore.com"# 你的邮箱staging=0# 设为 1 测试,0 获取真实证书docker-composerun--rmcertbot certonly--webroot-w/var/www/certbot\--email$email\--domains"${domains[*]}"\--agree-tos\--no-eff-email\$([$staging="1"]&&echo"--staging")\--force-renewal

执行脚本:

chmod+x init-letsencrypt.sh ./init-letsencrypt.sh

控制台输出:

Requesting a certificateformyecommercestore.com and www.myecommercestore.com... Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/myecommercestore.com/fullchain.pem Key is saved at: /etc/letsencrypt/live/myecommercestore.com/privkey.pem

证书获取成功后,修改 Nginx 配置启用 HTTPS,然后重启 Nginx:

docker-composerestart nginx

四、Django 安全配置

部署 HTTPS 后,还需要在 Django 的 settings 中做一些安全设置。

编辑django_ecommerce/settings_production.py

# HTTPS 安全设置SECURE_SSL_REDIRECT=True# 将所有 HTTP 请求重定向到 HTTPSSECURE_HSTS_SECONDS=31536000# 强制浏览器在一年内使用 HTTPS 访问SECURE_HSTS_INCLUDE_SUBDOMAINS=True SECURE_HSTS_PRELOAD=True SECURE_BROWSER_XSS_FILTER=True# XSS 保护SECURE_CONTENT_TYPE_NOSNIFF=True# 防止 MIME 类型嗅探CSRF_COOKIE_SECURE=True# CSRF Cookie 仅在 HTTPS 下传输SESSION_COOKIE_SECURE=True# Session Cookie 仅在 HTTPS 下传输# 反向代理后的安全设置SECURE_PROXY_SSL_HEADER=('HTTP_X_FORWARDED_PROTO','https')

注意:SECURE_SSL_REDIRECT在 Nginx 已经处理重定向时,可以关闭(设为 False),否则可能导致重定向循环。通常让 Nginx 处理 80→443 重定向,Django 设置SECURE_PROXY_SSL_HEADER即可识别请求是否为 HTTPS。


五、更新 ALLOWED_HOSTS 和支付回调地址

.envsettings_production.py中,更新允许的主机和支付宝回调 URL:

ALLOWED_HOSTS=['myecommercestore.com','www.myecommercestore.com','localhost','127.0.0.1']ALIPAY_RETURN_URL='https://www.myecommercestore.com/payment/return/'ALIPAY_NOTIFY_URL='https://www.myecommercestore.com/payment/notify/'

如果使用支付宝沙箱,注意沙箱的网关是https://openapi-sandbox.dl.alipaydev.comnotify_url必须使用https://,否则支付宝会拒绝发送通知。


六、测试 HTTPS 部署

6.1 访问验证

在浏览器输入https://www.myecommercestore.com,你应该看到:

  • 地址栏左侧出现锁形图标,显示“连接是安全的”。

  • 网站功能完全正常(注册、登录、浏览、下单)。

  • HTTP 地址自动跳转到 HTTPS。

6.2 SSL 评级测试

使用 SSL Labs 测试你的域名安全性:
访问 https://www.ssllabs.com/ssltest/,输入你的域名。

通常 Let’s Encrypt + 现代 Nginx 配置可达到 A 或 A+ 评级。

6.3 强制 HTTPS 测试

直接访问http://myecommercestore.com,应被重定向到https://myecommercestore.com

使用 curl 验证:

curl-Ihttp://myecommercestore.com

控制台输出:

HTTP/1.1301Moved Permanently Server: nginx/1.25.0 Location: https://myecommercestore.com/
6.4 Django 安全设置验证

登录后,打开浏览器开发者工具 → Application → Cookies,查看sessionidcsrftoken,它们的Secure属性应被勾选,表示仅在 HTTPS 下传输。


七、常见问题与排查


八、总结与下集预告

今天我们完成了电商平台的“上线最后一公里”——HTTPS 配置与域名绑定:

  • 购买了域名并完成 DNS 解析;

  • 使用 Let’s Encrypt 获取了免费的 SSL 证书;

  • 针对直装和 Docker 两种方式分别配置了 HTTPS;

  • 更新了 Django 的安全设置,确保 Cookie 安全;

  • 测试了强制 HTTPS 跳转和 SSL 评级。

现在,你的电商平台已经达到了商用的安全标准,可以通过https://www.你的域名.com正大光明地接客了!

整个系列也进入了最后的收尾阶段。第 30 篇,我将带大家回顾这 30 篇的完整项目成果,展示系统功能全景,并给出后续扩展方向——微服务化、Kubernetes 部署、国际化、移动端 API、AI 推荐等,为你的技术进阶指明道路。

想了解更多还可以去公众号、今日头条搜索「IT策士」,一起升级 IT 思维 !


本文为《Django 从 0 到 1 打造完整电商平台》系列第 29 篇。

http://www.zskr.cn/news/1397149.html

相关文章:

  • 基于深度嵌入聚类与序列自编码的无监督日志异常检测方案LogDEC
  • 海珠区搬家公司电话 高端搬家与普通搬家区别详解 - 从来都是英雄出少年
  • 059括号生成
  • 基于ResNet50-SLT与Seq2Seq的自动图像标注系统:原理、实现与优化
  • 2026年 电热管/模温机电热管/单头电热管/法兰式电热管/高温电热管/双头电热管/PET高温电热管厂家推荐:热导效率与耐温性能双重保障的源头品牌榜单 - 品牌企业推荐师(官方)
  • 面试鸭:你的面试通关加速器,1万+高频题库免费刷
  • 公安部:智能网联汽车道路测试与示范应用安全通行规范 2026
  • Spring AI Multi-Agent 生产级实战:从原理、架构到高并发落地
  • Spring Boot + WebSocket 群聊已读未读:从 Demo 到生产级架构设计与落地
  • Unabyss 智能内容生成与应用场景实战
  • 从零构建MATLAB GUI手写板:集成CNN模型实现实时数字识别
  • 让多智能体不互相打架 责任边界设计比提示词更重要
  • AI应用开发学习路径/50W年薪构成
  • 从m4s到MP4:数字内容保存者的技术救赎之路
  • SRIS-Net:基于空间-频域融合与双任务引导的鲁棒图像隐写术
  • 避坑指南:R语言raster读取栅格时,na.rm参数没设置对,结果全变NA了怎么办?
  • 2026涡街流量计国产十大品牌深度测评:依斯特稳居榜首,谁在撬动工业过程控制新格局? - 水质仪表品牌排行榜
  • Go语言Web安全防护实战
  • C语言详细入门教学_c语言教程_C语言入门教程
  • 从零打造可落地的直流电机 PID 驱动系统 (十一):控制超调【完整工程源码 + 可直接复用】
  • 2026年 起重机厂家推荐排行榜:单梁/双梁/桥式/欧式起重机、电动葫芦、环链电动葫芦、升降平台优质品牌深度解析与选购指南 - 品牌企业推荐师(官方)
  • 2026年NEW趋势下,如何挑选河南夜用成人护理垫实力厂商? - 2026年企业资讯
  • 2026现阶段深圳知名的股权架构设计律师深度评测:为何侯松涛律师成为企业家的战略? - 2026年企业资讯
  • 基于进化信息与XGBoost的淀粉样蛋白预测:特征工程与模型构建全解析
  • 2026年5月论文降AI工具实测:4款知网可用软件推荐
  • 2026年加热管厂家榜单:单头/双头/高温/模温机加热管,工业加热核心优选推荐 - 品牌企业推荐师(官方)
  • Lovable平台灰度发布事故复盘:一次配置错误引发的30万用户课程中断,我们用11分钟热修复的底层机制
  • MongoDB 复制(副本集)
  • Perl 时间日期处理指南
  • 开发AI应用时如何利用Taotoken统一管理多个API密钥