Gigalixir上Phoenix应用HTTP转HTTPS重定向问题求助
解决Gigalixir上Elixir/Phoenix应用HTTP转HTTPS的问题
我来帮你搞定这个HTTPS强制跳转的问题,在Gigalixir部署Phoenix应用时,这个场景我之前碰到过好几次,咱们一步步排查解决:
1. 修正force_ssl的配置细节
你之前添加的force_ssl配置差了几个关键项,首先不要把host设为nil,明确指定你的域名,同时要确保Phoenix信任Gigalixir反向代理发送的x-forwarded-proto头。更新后的完整配置应该是这样:
config :zoinks, ZoinksWeb.Endpoint, load_from_system_env: true, server: true, secret_key_base: "${SECRET_KEY_BASE}", url: [scheme: "https", host: "sqrnut.gigalixirapp.com", port: 443], cache_static_manifest: "priv/static/cache_manifest.json", # 修正后的force_ssl配置 force_ssl: [rewrite_on: [:x_forwarded_proto], host: "sqrnut.gigalixirapp.com", port: 443], # 关键:让Phoenix信任反向代理的x-forwarded-proto头 http: [port: System.get_env("PORT") || 4000, protocol_options: [x_forwarded_proto: true]]
解释下:
host指定域名能确保Phoenix生成正确的跳转URL,避免跳转出错protocol_options: [x_forwarded_proto: true]是核心:Gigalixir的负载均衡器会处理SSL终止,所有到你应用的请求都是HTTP,Phoenix需要通过这个头判断原始请求的协议,才能触发HTTPS跳转
2. 确认Procfile配置正确
Gigalixir依赖Procfile启动应用,确保你的项目根目录下的Procfile内容是:
web: mix phx.server
如果Procfile配置错了,应用可能不会加载正确的Endpoint配置。
3. 清除缓存并重新部署
旧的配置可能被缓存,所以一定要提交修改并重新部署:
git add config/prod.exs # 假设你修改的是生产环境配置文件 git commit -m "Fix HTTPS force redirect config" git push gigalixir main
如果你用的是Gigalixir的mix部署工具,也要确保重新构建镜像。
4. 查看应用日志排查问题
部署完成后,通过命令查看应用日志,确认配置是否生效:
gigalixir logs --tail
如果看到类似Endpoint started的日志,检查里面的配置是否包含你设置的force_ssl和http选项;如果有跳转相关的错误,日志里也会给出线索。
5. 验证跳转效果
等应用重启完成后,访问http://sqrnut.gigalixirapp.com,应该会自动跳转到https://开头的地址。如果还是不行,尝试用curl查看响应头:
curl -v http://sqrnut.gigalixirapp.com
看看是否有Location头指向HTTPS地址,或者是否有x-forwarded-proto头被正确传递。
内容的提问来源于stack exchange,提问作者Mitkins
相关产品推荐
相关产品推荐

