CentOS下Apache反向代理Gunicorn部署的Flask应用HTTPS故障及方案合理性咨询
最优解决方案(符合通用部署规范,无额外安全风险)
你原本预期的客户端--HTTPS-->Apache,Apache--HTTP-->Gunicorn是行业标准的反向代理部署架构,完全不需要给本地Gunicorn配置SSL证书,也不需要调整SSL代理校验参数,仅修改Apache HTTPS虚拟主机配置即可解决所有问题:
<VirtualHost *:443> # 保留原有SSL证书相关配置即可 SSLCertificateFile /etc/pki/tls/certs/cert.pem SSLCertificateKeyFile /etc/pki/tls/private/cert.key # 删掉原有的SSLProxyEngine on配置,代理本地HTTP服务不需要开启该参数 # 把代理目标的https协议改成http即可 ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ </VirtualHost>
修改完成后把Gunicorn配置里新增的keyfile、certfile两行配置删除,重启Gunicorn和Apache服务,HTTP、HTTPS访问都会恢复正常。
关于你当前临时方案的安全性说明
你现在使用的SSLProxyCheckPeerName off和SSLProxyCheckPeerCN off确实属于不推荐的配置:
- 如果是代理公网外部HTTPS服务,关闭这两个参数会导致Apache不校验上游服务证书有效性,存在中间人攻击风险
- 你的场景下代理目标是本机127.0.0.1的服务,流量不会离开服务器,所以即使关闭这两个参数实际不会产生安全隐患,但属于冗余的绕路配置,远不如上面的标准方案简洁合理。
异常根因说明
- 最初HTTPS配置错误将代理目标写为
https://localhost:8080,但当时Gunicorn仅支持HTTP协议,无法解析Apache发送的HTTPS请求,直接触发超时返回502 - 后续给Gunicorn配置SSL证书后,证书绑定的域名是example.com,Apache用localhost域名请求上游服务,域名不匹配触发证书校验错误,关闭校验后虽然能跑通,但属于绕开问题而非解决问题。
内容的提问来源于stack exchange,提问作者bloodleh
相关产品推荐
相关产品推荐

