当前位置: 首页 > 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.jsqmd.com/news/893363/

相关文章:

  • Hermes Agent 安装教程:多平台接入与网关配置详解
  • 大语言模型与混合集成架构在司法裁决预测中的应用与实践
  • 基于深度嵌入聚类与序列自编码的无监督日志异常检测方案LogDEC
  • 海珠区搬家公司电话 高端搬家与普通搬家区别详解 - 从来都是英雄出少年
  • 2026最新视频号视频保存到相册方法多种实用技巧分享
  • Go语言Web安全防护实战
  • 中文文献管理难题如何破解?Jasminum为Zotero带来智能化解决方案
  • Power BI中用DAX构建可配置的周末与周边界识别体系
  • 嵌入式NAND闪存文件系统选型:JFFS2、YAFFS2与UBIFS深度对比
  • 告别繁琐设置!用‘netplwiz’和‘Guests组’两步搞定Win10文件夹共享(含手机访问)
  • 无细胞表达技术助力腾讯AI Lab在Nature子刊发文,实现蛋白设计闭环
  • 动态目标跨镜无缝接力追踪技术在智能仓储无人值守场景中的应用白皮书
  • 2026年教程:视频号视频如何保存到手机相册?苹果安卓通用方法
  • 2026年5月论文降AI工具实测:4款知网可用软件推荐
  • 让多智能体不互相打架 责任边界设计比提示词更重要
  • 2026年 电热管/模温机电热管/单头电热管/法兰式电热管/高温电热管/双头电热管/PET高温电热管厂家推荐:热导效率与耐温性能双重保障的源头品牌榜单 - 品牌企业推荐师(官方)
  • 3步掌握华硕笔记本终极优化:GHelper项目核心功能详解
  • Kubernetes持续集成与持续交付最佳实践:构建自动化部署流水线
  • 【Lovable预约系统开发实战指南】:20年专家亲授高并发、零宕机、用户留存提升300%的5大核心架构设计
  • Linux内核配置的‘活字典‘:手把手教你用/proc/config.gz查看与备份内核参数
  • Sub-THz全嵌入式介质天线设计:高增益宽带宽的集成方案
  • Kubernetes自动化运维与监控告警:构建智能化运维体系
  • 动态目标跨镜无缝接力追踪技术在危化品生产厂区安防场景中的应用白皮书
  • 基于进化信息与XGBoost的淀粉样蛋白预测:特征工程与模型构建全解析
  • 从零构建MATLAB GUI手写板:集成CNN模型实现实时数字识别
  • 四川防草除砂取水头技术解析与场景适配指南:全自动净水器推荐/净水设备厂家推联系方式/医院污水处理设备/四川污水处理设备/选择指南 - 优质品牌商家
  • 基于双曲深度学习与增强SPICE模型的SiC MOSFET阈值电压智能监测
  • 3分钟搞定中文文献管理:Zotero茉莉花插件终极指南
  • 20 + 维度全景透视:数据驱动下的品牌 GEO 健康度实战报告
  • Go语言认证与授权机制详解