You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为基于Waitress的Flask服务器配置HTTPS?

为Flask+Waitress配置HTTPS的正确方法

Waitress的serve()函数本身不支持certfile和keyfile参数,你之前的写法会触发参数错误,以下是两种可行的正确实现方式:

方法一:命令行启动(生产环境推荐)

直接通过Waitress的命令行工具指定证书和密钥,无需修改代码:

waitress-serve --listen=0.0.0.0:443 --ssl-certfile=path/to/certfile.pem --ssl-keyfile=path/to/keyfile.pem your_flask_app:app

注:HTTPS默认端口为443,若使用其他端口(如5000),用户访问时需显式携带端口号,格式为https://你的域名:5000。

方法二:代码内配置SSL上下文

如果要在Python代码中集成HTTPS配置,需手动创建SSL上下文并绑定到Waitress服务器:

from waitress import create_server
from flask import Flask
import ssl

app = Flask(__name__)

# 示例路由,替换为你的业务逻辑
@app.route('/')
def index():
    return "HTTPS连接已建立"

if __name__ == '__main__':
    # 加载证书与私钥,创建SSL上下文
    ssl_ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    ssl_ctx.load_cert_chain(certfile='path/to/certfile.pem', keyfile='path/to/keyfile.pem')
    
    # 创建Waitress服务器实例
    server = create_server(app, host='0.0.0.0', port=443, url_scheme='https')
    # 为服务器套接字绑定SSL上下文
    server.socket = ssl_ctx.wrap_socket(server.socket, server_side=True)
    
    server.run()

关键注意事项

  • Certbot生成的有效证书文件通常在/etc/letsencrypt/live/你的域名/目录下,fullchain.pem是完整公钥链(需作为certfile),privkey.pem是私钥(需作为keyfile),不要混淆文件。
  • 若使用非443端口,需确保服务器防火墙已开放对应端口。
  • url_scheme='https'参数用于让Flask生成正确的HTTPS链接,避免页面出现混合内容报错。

内容的提问来源于stack exchange,提问作者Dominik Stipic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 12:39:56