You need to enable JavaScript to run this app. 如何在Heroku上为含Next.js、Express及nginx反代的应用强制使用HTTPS
优惠活动
大模型
产品
解决方案
定价
更多

如何在Heroku上为含Next.js、Express及nginx反代的应用强制使用HTTPS

Heroku部署场景下HTTP强制跳转HTTPS的实现方案

常规实现位置说明

HTTP到HTTPS的强制跳转逻辑,业界常规就是在反向代理层实现,也就是你架构中的Nginx节点,完全不需要修改前端、后端业务代码,也不需要调整DNS配置。

为什么其他位置不推荐配置

  • 业务层(Next.js前端、Express后端)实现:需要等请求穿透反向代理、到达具体应用节点后才会触发跳转,会平白增加前后端节点的负载;而且需要同时在两个应用层都写跳转逻辑,维护成本高,还容易出现漏拦——比如用户直接通过HTTP访问后端API端点,前端应用根本接不到这类请求,跳转逻辑会直接失效。
  • DNS层实现:DNS仅具备域名解析的能力,没有办法识别用户访问请求所使用的传输协议,从根本上就不支持按协议做定向跳转,该路径不可行。

结合Heroku平台特性的具体配置要点

Heroku的SSL证书是在平台边缘负载均衡层完成终止的,所有转发到你部署的Nginx节点的请求,都是经边缘层解密后的内网HTTP连接——也就是说你没法通过Nginx本身的连接属性判断用户最初是用HTTP还是HTTPS发起的请求。
但Heroku会把用户原始访问的协议信息,通过X-Forwarded-Proto请求头透传到后端服务,你只需要在Nginx的入口server配置块最前面,增加一段判断逻辑即可:

# 当判断到用户原始请求为HTTP协议时,返回301永久重定向到对应HTTPS地址
if ($http_x_forwarded_proto = "http") {
    return 301 https://$host$request_uri;
}

这种配置方式的优势:

  • 所有进入系统的请求会在Nginx节点第一时间完成判断拦截,不会将HTTP流量转发到前后端业务节点,没有额外性能损耗
  • 覆盖所有访问路径,不管用户访问的是前端页面、后端API还是静态资源,只要是通过HTTP发起的请求都会被统一跳转,不存在漏拦场景
  • 所有规则集中在代理层维护,后续调整跳转策略不需要改动任何业务代码

注意:因为SSL证书已经由Heroku边缘层托管,不需要在Nginx节点上额外配置HTTPS证书,避免和平台的转发规则冲突。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 11:27:01