如何阻止Heroku将子域名的HTTP请求重定向至HTTPS?
解决Heroku自动HTTP转HTTPS重定向的问题
我来帮你搞定这个Heroku的HTTP重定向问题,顺便解释下为啥根域名的站点能正常运行~
阻止自动重定向的三种方法
Heroku的HTTP→HTTPS自动重定向通常是由平台默认路由规则、应用环境变量或者SSL配置导致的,你可以尝试以下方案:
1. 禁用FORCE_SSL环境变量
很多框架(比如Rails)或者Heroku的默认配置会开启FORCE_SSL来强制HTTPS。你可以通过Heroku CLI关闭这个设置:
heroku config:set FORCE_SSL=false --app 你的应用名称
替换命令里的你的应用名称为实际的Heroku应用名,执行后应用会自动重启,强制重定向就会被关闭。
2. 在应用代码中添加中间件拦截重定向
如果你的应用是自定义代码(比如Node.js/Express、Python/Flask),可以在代码里添加中间件来取消HTTPS重定向。举个Express的例子:
app.use((req, res, next) => { // 忽略Heroku的x-forwarded-proto头,不强制转HTTPS next(); });
这个方法需要你能修改应用代码,适合自定义开发的场景。
3. 检查并关闭Heroku的SSL自动管理
登录Heroku控制面板,进入你的应用→Settings→Domains and certificates,看看是否开启了Automated Certificate Management (ACM)。如果开启了,Heroku会自动尝试为你的域名配置SSL证书,当证书无法生效时就会触发错误重定向。关闭ACM后,平台就不会强制HTTPS了。
为什么根域名的站点能正常运行?
这和根域名的DNS配置方式有关:
- 根域名(比如
example.com)不能用CNAME记录(DNS规范限制),所以你应该是用了ALIAS/ANAME记录指向Heroku的负载均衡器。Heroku对根域名的路由逻辑和子域名不同,默认不会强制HTTPS重定向,或者你的根域名已经正确配置了SSL证书(比如通过ACM成功获取了证书),所以访问正常。 - 而你的子域名用的是CNAME记录指向
herokudns.com,Heroku对这类子域名的默认行为是优先尝试HTTPS,当没有有效SSL证书时,就会出现你遇到的SSL协议错误。
内容的提问来源于stack exchange,提问作者Robert Skarżycki
相关产品推荐
相关产品推荐

