Cloudflare代理下Uvicorn+FastAPI遇SSL_ERROR_NO_CYPHER_OVERLAP错误求助
解决Cloudflare代理下FastAPI(Uvicorn+Traefik)的SSL_ERROR_NO_CYPHER_OVERLAP错误
问题根源
Cloudflare Flexible SSL 模式的逻辑是:浏览器与Cloudflare之间走HTTPS加密,但Cloudflare和你的后端服务器之间用明文HTTP通信。而你当前的Traefik配置强制将所有HTTP请求重定向到HTTPS,这就造成了冲突:
- Cloudflare以HTTP方式向后端发请求,Traefik返回HTTPS重定向响应
- Cloudflare尝试以HTTPS连接后端,但Flexible模式下Cloudflare并未配置与后端建立HTTPS连接的正确逻辑(比如不验证后端证书、默认期望后端用HTTP),最终触发
SSL_ERROR_NO_CYPHER_OVERLAP握手失败。
修复方案
方案1:调整Cloudflare SSL模式(推荐)
把Cloudflare的SSL/TLS设置从Flexible改成Full或Full (strict):
- Full:Cloudflare与后端用HTTPS通信,不验证后端证书是否可信(适合自签证书场景)
- Full (strict):Cloudflare会验证后端证书的合法性(推荐用Let's Encrypt等权威机构颁发的证书)
这样Cloudflare和后端之间用HTTPS通信,Traefik的HTTPS重定向逻辑可以正常工作,同时解决 cipher 不匹配问题。
方案2:修改Traefik配置,跳过Cloudflare请求的HTTPS重定向
如果暂时不能改Cloudflare的SSL模式,需要让Traefik不对来自Cloudflare的HTTP请求做重定向。可以通过添加Traefik中间件,识别Cloudflare的请求头,只对非Cloudflare来源的请求执行重定向:
- 添加判断请求来源的Traefik中间件(可通过Coolify的容器标签配置):
traefik.http.middlewares.cloudflare-skip-redirect.ifrule=!Headers(`CF-Connecting-IP`) traefik.http.middlewares.conditional-redirect.middlewares=redirect-to-https,cloudflare-skip-redirect
- 更新路由的中间件配置,替换原来的强制重定向:
traefik.http.routers.http-0-backend.middlewares=conditional-redirect
或者更简单:直接删除Coolify自动生成的HTTPS重定向相关Traefik标签——因为Cloudflare已经在前端处理了HTTPS加密,后端只需要处理HTTP请求即可:
- 删除以下标签:
traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=httpstraefik.http.routers.http-0-backend.middlewares=redirect-to-https
方案3:让Uvicorn直接提供HTTPS服务(可选)
如果坚持用Flexible模式,也可以让Uvicorn直接启用HTTPS(需配置可信证书),绕开Traefik的HTTP转HTTPS逻辑,修改Uvicorn启动命令:
uvicorn main:app --host 0.0.0.0 --port 2095 --ssl-keyfile=/path/to/private-key.pem --ssl-certfile=/path/to/certificate.pem
但这种方式不如调整Cloudflare SSL模式简洁高效。
验证
- 应用修改后,清空浏览器缓存
- 开启Cloudflare代理,访问后端服务
- 检查浏览器是否还出现
SSL_ERROR_NO_CYPHER_OVERLAP错误
内容的提问来源于stack exchange,提问作者Gabriel Mesquita
相关产品推荐
相关产品推荐

