如何使用Gunicorn与Flask实现HTTP到HTTPS的重定向?
Flask + Gunicorn 实现HTTP到HTTPS自动重定向配置方案
我刚搞定了类似的全站HTTPS配置,用Flask结合Gunicorn实现自动把HTTP请求重定向到HTTPS,下面是我实际在用的配置,亲测有效:
1. 在Flask应用中添加重定向逻辑
在你的app.py里加入before_request钩子,每次请求进来先检查协议,如果是HTTP就直接重定向到对应的HTTPS地址,用301永久重定向还能帮搜索引擎更新索引:
from flask import Flask, request, redirect app = Flask(__name__) @app.before_request def before_request(): # 检测请求是否走的HTTP协议 if request.url.startswith('http://'): # 替换协议为HTTPS,只替换一次防止出现意外 url = request.url.replace('http://', 'https://', 1) # 返回301永久重定向 return redirect(url, code=301) if __name__ == '__main__': app.run()
2. 配置Supervisor中的Gunicorn命令
要让Gunicorn同时监听80(HTTP)和443(HTTPS)端口,还要指定你的SSL证书和私钥路径,这样它既能接收HTTP请求(然后被Flask重定向),也能直接处理HTTPS请求。我的Supervisor配置里的command是这样的:
command=/home/MyToDo/venv/bin/gunicorn --certfile=/home/MyToDo/SSL/mytodo.vip.cer --keyfile=/home/MyToDo/SSL/mytodo.vip.key -w3 -b0.0.0.0:443 -b0.0.0.0:80 app:app
几个关键参数说明:
--certfile/--keyfile:填你实际的SSL证书和私钥路径,记得把文件权限设为600,避免敏感信息泄露-w3:启动3个工作进程,你可以根据服务器的CPU核心数调整,一般是核心数×2+1-b0.0.0.0:443:监听443端口处理HTTPS请求-b0.0.0.0:80:监听80端口接收HTTP请求,再由Flask转去HTTPS
额外注意事项:
- 确保服务器的80和443端口已经在防火墙里开放,没被其他服务占用
- SSL证书要有效,比如用Let's Encrypt的免费证书就很方便
- 如果只是测试阶段,可以先用302临时重定向,确定没问题再换成301
内容的提问来源于stack exchange,提问作者Harpsichord1207
相关产品推荐
相关产品推荐

