Как настроить поддомен для обслуживания всего трафика API?

У меня есть одно веб-приложение, работающее в одном экземпляре на example.com. У него есть API на example.com/api.

Я хочу настроить субдомен api.example.comи обслуживать весь трафик API с этого поддомена.

Как обслуживать весь трафик API из поддомена, работая с одного экземпляра?

1 ответ

Вы можете настроить его на уровне маршрутизатора. Взгляните на этот пример https://blog.gazler.com/blog/2015/07/18/subdomains-with-phoenix/

Короче говоря.

  • Определите, где у него есть все маршруты, связанные с API.
  • Поставьте заглушку в приложении endpointнепосредственно перед основным маршрутизатором для обработки запросов к APIRouter.
      # endpoint.ex
plug YourApp.Plug.Subdomain, YourApp.APIRouter
plug YourApp.Router

Логика для плагина должна быть:

      defmodule YourApp.Plug.Subdomain do
  import Plug.Conn

  @doc false
  def init(default), do: default

  @doc false
  def call(conn, router) do
    case get_subdomain(conn.host) do
      subdomain when subdomain == "api" ->
        # If it is from API -> initialize/match current request to APIRouter
        conn
        |> router.call(router.init({}))
        |> halt()

      _ -> conn # If it's not -> continue with current AppRouter
    end
  end
  
  # A function to get current subdomain or try to match it, your call.
  defp get_subdomain(host) do
    root_host = Subdomainer.Endpoint.config(:url)[:host]
    String.replace(host, ~r/.?#{root_host}/, "")
  end
end
Другие вопросы по тегам