1.基础配置方法
1 | import ssl |
- 使用OpenSSL生成自签名证书(开发测试):
1
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365
- 通过
ssl.SSLContext加载证书文件,生产环境建议使用Let’s Encrypt证书 - 流程图展示HTTPS请求处理:
graph LR A[客户端] --> B[TLS握手] B --> C{证书验证} C -->|通过| D[加密通信] C -->|失败| E[连接终止]
2.HTTPS核心原理
2.1 TLS终止代理
1 | server { |
- Nginx负责SSL/TLS加解密,转发HTTP请求到FastAPI应用
- 必须设置
X-Forwarded-Proto头让应用识别原始协议
2.2 证书管理机制
| 证书类型 | 有效期 | 适用场景 |
|---|---|---|
| 自签名证书 | 自定义 | 开发测试环境 |
| Let’s Encrypt | 90天 | 生产环境(自动续期) |
| 商业CA证书 | 1-2年 | 企业级应用 |
3.生产环境建议
部署架构优化:
1
gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app
- 使用Gunicorn管理Uvicorn worker进程提升并发能力
安全增强配置:
1
2add_header Strict-Transport-Security "max-age=31536000" always;
return 301 https://$host$request_uri;强制HTTP跳转HTTPS并启用HSTS
容器化部署:
- Nginx容器需通过宿主机IP访问FastAPI服务(非127.0.0.1)
- 使用Docker Compose编排证书卷挂载
监控与维护:
- 配置Certbot自动续期Let’s Encrypt证书
- 监控证书有效期(Alertmanager+Prometheus)
4.注意事项
- 开发环境与生产环境的证书管理需隔离,禁止自签名证书上线
- 启用HTTPS后需同步更新API文档中的端点协议
- WebSocket协议需使用
wss://前缀建立安全连接
测试命令示例:
1
2
3
4
5 # 开发环境启动
uvicorn main:app --ssl-certfile cert.pem --ssl-keyfile key.pem
# 生产环境证书续期
certbot renew --quiet --post-hook "systemctl reload nginx"