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

如何在Google App Engine上配置Rails应用实现HTTP转HTTPS重定向

解决Rails应用在Google App Engine上的HTTP转HTTPS重定向问题

嘿,我来帮你搞定这个HTTP转HTTPS的问题!你现在的配置踩了一个Ruby运行时特有的小坑,我一步步给你理顺:

1. 修正app.yaml的核心配置

你之前的script: config/application.rb是错的——Google App Engine的Ruby运行时不会直接加载这个文件,正确的做法是用script: auto让它自动识别Rails的入口(也就是config.ru)。修改后的app.yaml应该是这样:

handlers:
- url: /.*
  script: auto
  secure: always
  redirect_http_response_code: 301

secure: always会让GAE的负载均衡直接把HTTP请求重定向到HTTPS,而redirect_http_response_code: 301指定了永久重定向(对SEO更友好)。

2. 让Rails识别GAE的HTTPS代理头

GAE的负载均衡会把HTTPS请求转换成HTTP传给你的Rails应用,同时通过X-Forwarded-Proto头告诉应用原始请求是HTTPS。所以你需要让Rails信任这个头,并且强制HTTPS:

打开config/environments/production.rb,添加/修改这几行:

# 强制所有请求使用HTTPS
config.force_ssl = true

# 配置HSTS(可选但推荐,让浏览器后续直接用HTTPS访问)
config.ssl_options = { hsts: { expires: 1.year.to_i, subdomains: true } }

# 信任GAE的代理头,让Rails识别真实的请求协议
config.action_dispatch.trusted_proxies = [:all]

如果不想信任所有代理(更安全的做法),可以替换成GAE的官方IP段,但[:all]在GAE环境下是安全的,因为所有请求都经过GAE的负载均衡。

3. 重新部署测试

把修改后的app.yaml和Rails代码重新部署到GAE:

gcloud app deploy

之后用curl或者浏览器访问HTTP地址,应该会自动301跳转到对应的HTTPS地址了。

为什么原来的配置不生效?

核心问题是script: config/application.rb导致GAE无法正确启动你的Rails应用,连基本的请求路由都处理不了,更别提触发secure: always的重定向规则了。Ruby运行时需要的是Rack入口(config.ru),用script: auto就能自动帮你关联到正确的入口文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:25:24