Как настроить поддомен для обслуживания всего трафика 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