在AWS上为Django应用配置HTTPS
在AWS上为Django应用启用HTTPS需要结合AWS的服务和Django配置。以下是完整的实现步骤:
1. 获取SSL证书
AWS提供免费的SSL/TLS证书服务AWS Certificate Manager (ACM):
- 登录AWS控制台,导航到ACM (Certificate Manager)
- 点击"请求证书"
- 选择"公有证书",点击"下一步"
- 添加你的域名(如example.com)和子域名(如*.example.com)
- 选择DNS验证方式
- 点击"请求"
- 在证书列表中点击你的证书,查看并创建DNS验证记录
- 在Route 53中添加CNAME记录完成验证
2. 配置AWS负载均衡器(推荐方案)
创建应用负载均衡器(ALB)
- 在EC2控制台,导航到"负载均衡器"
- 点击"创建负载均衡器",选择"应用负载均衡器"
- 配置基本设置: 名称选择正确的VPC选择至少两个可用区
- 在"侦听器"部分添加: HTTP 80端口 → 重定向到HTTPSHTTPS 443端口 → 使用之前创建的ACM证书
- 配置安全组,允许HTTP(80)和HTTPS(443)入站流量
- 配置目标组指向你的Django实例(EC2或ECS)
3. Django配置
在settings.py
中添加以下配置:
# 安全设置 SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') SECURE_SSL_REDIRECT = True SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True # HSTS设置 SECURE_HSTS_SECONDS = 31536000 # 1年 SECURE_HSTS_INCLUDE_SUBDOMAINS = True SECURE_HSTS_PRELOAD = True # 其他安全设置 SECURE_CONTENT_TYPE_NOSNIFF = True SECURE_BROWSER_XSS_FILTER = True X_FRAME_OPTIONS = 'DENY'
4. 替代方案:直接在EC2上配置HTTPS
如果你不使用负载均衡器,可以直接在EC2实例上配置:
安装Nginx和配置SSL
- SSH连接到你的EC2实例
- 安装Nginx:
- 配置Nginx:添加以下配置:
- 启用配置:
使用Certbot获取Let's Encrypt证书
- 安装Certbot:
- 获取证书:
- 设置自动续期:
5. 使用CloudFront CDN (可选)
如果你使用CloudFront作为CDN:
- 创建CloudFront分发
- 选择你的源站(ALB或S3静态文件)
- 在"查看器协议策略"选择"将HTTP重定向到HTTPS"
- 在"源协议策略"选择"仅HTTPS"
- 在"备用域名(CNAME)"添加你的域名
- 选择之前创建的ACM证书
6. 配置Route 53 DNS
- 在Route 53控制台创建或选择你的托管区域
- 创建记录: 类型:A别名:是路由流量到:你的ALB或CloudFront分发
- 保存更改
7. 验证HTTPS配置
- 访问你的网站,确认自动重定向到HTTPS
- 使用SSL Labs测试工具检查配置:https://www.ssllabs.com/ssltest/
- 检查浏览器控制台,确保没有混合内容警告
8. 其他AWS服务集成
- S3静态文件:确保S3桶策略允许HTTPS访问
- RDS数据库:确保数据库连接使用SSL
- Elastic Beanstalk:在环境配置中启用HTTPS并关联ACM证书
通过以上步骤,你的Django应用将在AWS环境中完全启用HTTPS,提供安全的端到端加密。
进阶高级测试工程师 文章被收录于专栏
《高级软件测试工程师》专栏旨在为测试领域的从业者提供深入的知识和实践指导,帮助大家从基础的测试技能迈向高级测试专家的行列。 在本专栏中,主要涵盖的内容: 1. 如何设计和实施高效的测试策略; 2. 掌握自动化测试、性能测试和安全测试的核心技术; 3. 深入理解测试驱动开发(TDD)和行为驱动开发(BDD)的实践方法; 4. 测试团队的管理和协作能力。 ——For.Heart