2016-06-21 101 views
1

我想知道如何让Phoenix提供在同一台服务器上运行的不同IP应用程序,这些应用程序指向同一台服务器时有不同的IP。如何将Phoenix配置为基于不同的IP来提供不同的应用程序

例如,您将AppA和appB Phoenix应用程序运行在同一台服务器和同一端口(80)上,并且如果请求来自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

另一种解决方案可能是使用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的重定向到不同的端口。

+0

谢谢。事实上,这是一个解决方案。尽管如此,我希望在没有nginx的情况下在Phoenix Framework中获得解决方案。 –

+0

@PauloJaneiro足够公平 - 所以你看着试图通过凤凰独自做到这一点? –

+0

是的。我认为,如果我们有本地解决方案,我们应该赞成。我只是用一个假设来编辑我的问题 –