如何配置Phoenix根据不同的IP提供不同的应用

时间:2016-06-21 21:55:22

标签: elixir phoenix-framework

我想知道当你有不同的IP指向同一台服务器时,如何让Phoenix服务于同一服务器上运行的不同应用程序。

例如,您在相同的服务器和相同的端口(80)上运行AppA和appB Phoenix应用程序,如果请求来自IP X.X.X.X,您将提供appA服务。如果请求来自IP Y.Y.Y.Y,您将提供appB服务。 我尝试了一个简单的体验,我不能在同一个端口上运行两个应用程序(如果我不配置其他任何东西)。 我找到了我认为可以用于此目的的Plug.Adapters.Cowboy。根据文档,有一个选项允许我们定义绑定服务器的IP,例如:

Plug.Adapters.Cowboy.http MyPlug,[],ip:{188,250,167,106}

我的问题是:

1)放置此位置(在哪个文件/顺序中)?我想它应该是第一个插入endpoint.ex文件...

2)应该使用的插件名称(MyPlug)是什么?

1 个答案:

答案 0 :(得分:1)

另一种解决方案可能是使用Nginx来实现这一目标。例如,您可以在不同的端口上设置两个不同的凤凰应用程序,例如

#App 1
config :appname, AppName.Endpoint,
  http: [port: 8888],
  url: [host: "host"],
  server: true,
  root: ".",
  cache_static_manifest: "priv/static/manifest.json"

#App 2
config :appname, AppName.Endpoint,
  http: [port: 8889],
  url: [host: "host"],
  server: true,
  root: ".",
  cache_static_manifest: "priv/static/manifest.json"

然后你可以简单地使用Http_access_module来做这样的事情:

server {
    if ($remote_addr = 1.2.3.4) {
        rewrite ^ http://www.website.com/noscrape.htm;
    }
   ...
}

answer详细介绍了this gist,显示了如何使用nginx重定向到不同的端口。