Phoenix端点配置 - 强制HTTPS具有多个subomdains

时间:2017-04-12 18:25:22

标签: elixir phoenix-framework

我正在设置一个凤凰应用程序,该应用程序从同一端点提供多个子域。它只是使用一个插头在端点插头的末尾选择一个不同的路由器,具体取决于请求的子域。这一切都正常。

问题在于force_ssl配置。

我的端点配置如下所示:

config :frontend, Frontend.Endpoint,
  on_init: {Frontend.Endpoint, :load_from_system_env, []},
  url: [scheme: "https", host: "myapp.com", port: 443],
  force_ssl: [rewrite_on: [:x_forwarded_proto]],
  cache_static_manifest: "priv/static/cache_manifest.json"

主机必须只是myapp.com,因为此端点配置适用于所有子域。

不幸的是,此配置导致所有foo.myapp.com(HTTP和HTTPS)请求被重定向到https://myapp.com

我想要的行为是301:

  • http://foo.myapp.comhttps://foo.myapp.com
  • http://bar.myapp.comhttps://bar.myapp.com

https://foo.myapp.comhttps://bar.myapp.com的请求应 重定向。

帮助将不胜感激!如果它是相关的,我在Phoenix 1.3上。

1 个答案:

答案 0 :(得分:2)

来自SSL plug source

  

要动态重定向到当前请求的host:host   必须设置nil

看起来像:

config :myapp, MyApp.Endpoint,
  force_ssl: [
    host: nil,
    rewrite_on: [:x_forwarded_proto]
  ]

尽管如此,使用代理(即NGINX)将提供更精细的控制。