【问题标题】:Erlang Cowboy running two web servers on one machine using different portsErlang Cowboy 在一台机器上使用不同的端口运行两个 Web 服务器
【发布时间】:2020-08-23 01:27:55
【问题描述】:

二郎和牛仔的新手。我正在使用一些开源代码,它使用牛仔并侦听端口 8080 以提供 ng-admin 管理服务。

我想知道cowboy是否有可能也监听80端口来提供用户界面。

任何关于从哪里开始或任何代码 sn-ps 的帮助和建议将不胜感激。

非常感谢,

MPC

【问题讨论】:

  • 您没有提供足够的信息来帮助重现您的问题。也许您可以包含您所指的“开源代码”或牛仔处理程序的 sn-ps,或者显示开始侦听连接的 erlang 代码。你看过文档吗?
  • 我没有问题。我的问题更多的是让牛仔服务器使用两个不同的端口 80 和 8080 以及两个不同的接口的最佳方式。请原谅我的术语可能是错误的,因为这对我来说是全新的。谢谢你的评论。

标签: erlang port cowboy


【解决方案1】:

我对这个问题的理解是你是否可以在同一个 erlang VM 中启动两个牛仔服务器。两台服务器监听两个不同的端口。是的,你可以这样做。基本上,当您调用cowboy:start_clear 时,您会编译自己的路由并绑定到8080 和80 端口。

问题是这种做法是否有意义。我建议您是否可以使用路由来分隔两个应用程序,而不是在端口级别/单个 Web 服务器。

【讨论】:

  • 谢谢。我试图将这两个接口分开,以便管理员按照原始开源保留在端口 8080 上,但新的用户界面层位于端口 80 上。我不确定这是否有意义。不过感谢您的回答。
【解决方案2】:

根据我对您问题的理解,您希望有 2 台服务器在不同的端口上运行。您可以调用cowboy:start_clear/3 两次,使用不同的端口和相同或不同的路由。这绝对是可行的,但如上所述,如果它们使用相同的协议(在本例中为 http),则更建议使用命名空间路由来分隔应用程序(如 /foo/123/admin/foo/123)而不是不同的端口。如果您仍然需要两个服务器,它会是这样的:

    NormalRoutes = cowboy_router:compile(...),
    AdminRoutes = cowboy_router:compile(...),
    {ok, _} = cowboy:start_clear(http, [{port, 80}], #{
      env => #{dispatch => NormalRoutes}
    }),
    {ok, _} = cowboy:start_clear(http, [{port, 8080}], #{
      env => #{dispatch => AdminRoutes}
    }).

【讨论】:

  • 感谢您的回复。你的回答效果很好。谢谢。
  • 没问题,很高兴它帮助了你:)
猜你喜欢
  • 1970-01-01
  • 2022-01-02
  • 2019-01-21
  • 1970-01-01
  • 2013-02-20
  • 1970-01-01
  • 1970-01-01
  • 2012-10-26
  • 2023-03-21
相关资源
最近更新 更多