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

部署在Heroku的Rails应用对外为HTTPS但日志打印request.base_url显示HTTP原因

问题根因
  • Heroku平台的入口内置了反向代理和负载均衡层,所有外部HTTPS请求的TLS解密(SSL终止)操作都在这一层完成
  • 代理层与你的Rails应用实例之间走内网HTTP协议通信,所以Rails服务直接收到的原始请求本身就是HTTP协议,默认输出的request.base_url自然为HTTP前缀
  • Rails默认不会主动识别代理传递的X-Forwarded-Proto(标识外层真实请求协议)请求头,无法感知到外部真实请求的HTTPS协议
修复方法

你可以通过两步配置解决这个问题,所有配置都在Rails项目的config/environments/production.rb文件中修改:

  1. 配置Rails信任Heroku的内部代理,允许读取代理传递的协议标识头:
# 匹配Heroku内部代理的10段内网IP,Rails会信任这些代理传递的请求头
config.action_dispatch.trusted_proxies = /^10\./
# Rails 6及以上版本还需要添加你的域名到信任列表
config.hosts << "example.sample.com"
  1. 开启Rails强制SSL配置:
config.force_ssl = true

开启后Rails会自动根据X-Forwarded-Proto头识别外层真实协议,生成的request.base_url、应用内的所有链接都会自动带HTTPS前缀,同时会自动把HTTP请求跳转到HTTPS地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:36:03