Dum*_*nri 1 elixir phoenix-framework
凤凰城的 Web 应用程序。Nginx 用作反向代理。
目前,与往常一样,Web 应用程序处理单个域的请求。如果我将其他域的 DNS 指向同一服务器,我需要更改什么才能让我的 Phoenix 应用程序处理这些域的请求?
服务器上的 Web 应用程序将保留在单个实例中。并且它将可以通过多个域进行访问。不会重定向到主域 - 每个域都会像主域一样处理请求。
配置 Phoenix 应用程序将使用的主机的位置位于Phoenix.Endpoint.
Phoenix.Endpoint需要更改三个配置字段的默认值:
url: [host: ...]这应该是在 url 帮助程序或重定向中使用的后备主机名。请注意,每当您将conn(或socket) 传递给 URL 帮助程序时,它将使用那里的字段。check_origin:
origin要求主机名不等于url: [host: ...]上述字段。*.example.com)force_ssl: [host: ...]默认情况下,任何传入的 HTTP 请求都会重定向到此处设置的主机名。如果host:此选项列表中缺少该字段,则默认读取url: [host: ...]上述内容。如果您显式将其设置为host: nil,则默认使用 HTTP 请求中使用的主机名。请注意,如果您在反向代理中处理 SSL,则不需要此步骤,因为在这种情况下到达 Phoenix 的所有流量都将是 HTTP。你最终可能会得到这样的结果:
# in config/runtime.exs (in ancient Elixir/Phoenix versions: config/prod.exs)
config :my_app, MyAppWeb.Endpoint,
url: [host: "mydomain1.com", port: 443, scheme: "https"],
force_ssl: [host: nil],
check_origin: [
"https://mydomain1.com",
"https://mydomain2.com",
"https://*.mydomain3-and-all-its-subdomains.com",
]
Run Code Online (Sandbox Code Playgroud)
Phoenix 文档中的 Phoenix.Endpoint 配置部分