如何让Flask 2.2.4应用从HTTP切换为HTTPS运行?
Flask 2.2.4 启用HTTPS的可行方案
1. 开发测试:自动生成临时证书
Flask 2.2+ 仍支持通过ssl_context参数启用HTTPS,但使用'adhoc'选项需要依赖cryptography库,先安装依赖:
pip install cryptography
修改启动代码:
if __name__ == '__main__': app.run(ssl_context='adhoc', debug=True)
启动后访问https://localhost:5000即可,浏览器会提示证书不安全,仅适合开发测试场景。
2. 自定义自签名证书(更稳定的开发/预发布方案)
如果需要长期使用,建议自行生成自签名证书,用OpenSSL执行以下命令(需提前安装OpenSSL):
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365
将生成的cert.pem和key.pem放在项目根目录,修改启动代码:
if __name__ == '__main__': app.run(ssl_context=('cert.pem', 'key.pem'))
这种方式证书有效期更长,适合需要持续测试的场景。
3. 生产环境:用反向代理处理HTTPS
Flask自带的开发服务器不适合生产环境,推荐用Nginx + Gunicorn/uWSGI的架构:
- 安装Gunicorn:
pip install gunicorn
- 用Gunicorn启动Flask应用:
gunicorn --bind 127.0.0.1:5000 your_app_module:app
- 配置Nginx反向代理(示例):
server { listen 443 ssl; server_name your-domain.com; # 替换为你的SSL证书路径(推荐用Let's Encrypt免费证书) ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem; location / { proxy_pass http://127.0.0.1:5000; 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; } }
这种方案性能更强、安全性更高,是生产环境的标准配置。
为什么旧方案可能失效?
之前的教程可能没提cryptography依赖,Flask 2.2+ 使用'adhoc'必须安装该库,否则会报错;另外不要混淆参数名称,新版Flask唯一有效的HTTPS启动参数是ssl_context。
内容的提问来源于stack exchange,提问作者Alessandro199762
相关产品推荐
相关产品推荐

