gpt4 book ai didi

elixir - Phoenix 服务器上的 MIX_ENV=prod 在以 PORT=80 开始时崩溃

转载 作者:行者123 更新时间:2023-12-04 01:56:26 26 4
gpt4 key购买 nike

我遇到了一些混音问题,MIX_ENV=prodmix phoenix.server ,它在启动时失败。在 Linode 的 Ubuntu 14.04 上运行除 Erlang(17.x,我认为是 17.3)之外的所有最新版本(Elixir 1.0.5,Phoenix 0.14.0)。

$ MIX_ENV=prod PORT=80 mix phoenix.server
{"Kernel pid terminated",application_controller,"{application_start_failure,elirc_site,{{shutdown,{failed_to_start_child,'Elixir.ElircSite.Endpoint',{shutdown,{failed_to_start_child,'Elixir.Phoenix.Endpoint.Server',{shutdown,{failed_to_start_child,{ranch_listener_sup,'Elixir.ElircSite.Endpoint.HTTP'},{shutdown,{failed_to_start_child,ranch_acceptors_sup,{{badmatch,{error,eacces}},[{ranch_acceptors_sup,init,1,[{file,\"src/ranch_acceptors_sup.erl\"},{line,30}]},{supervisor,init,1,[{file,\"supervisor.erl\"},{line,243}]},{gen_server,init_it,6,[{file,\"gen_server.erl\"},{line,306}]},{proc_lib,init_p_do_apply,3,[{file,\"proc_lib.erl\"},{line,239}]}]}}}}}}}}},{'Elixir.ElircSite',start,[normal,[]]}}}"}

具体来说,我认为这是痕迹的这一部分。
{{badmatch,{error,eacces}},[{ranch_acceptors_sup,init,1,[{file,\"src/ranch_acceptors_sup.erl\"},{line,30}]}

最佳答案

正如 Nick Meharry 指出的那样,您正在尝试在传统上在 Unix 上的端口上运行 Phoenix 服务器进程,只有 root 可以绑定(bind)到(低端口(<1024))。

root 身份运行您的进程由于安全原因,不推荐使用 - 接管该进程的攻击者可以获得对整个操作系统的 root 访问权限。

通过在高端口(例如 4000)上运行服务器并使用简单的 iptables 规则将连接从端口 80 转发到端口 4000 来解决这个问题更安全。请注意,您机器上的任何用户都可以绑定(bind)到端口 4000 - 所以你失去了低端口的额外保护。

另一种解决方案是允许某些程序(mixelixir)使用 CAP_NET_BIND_SERVICE 绑定(bind)到 1024 以下的端口。可以使用 setcap 设置的 Linux 内核功能(自 2.6.24 起可用) .但是仍然任何用户都可以使用这个可执行文件,除非它们通过使用适当的文件访问权限仅对特定用户可用。

关于elixir - Phoenix 服务器上的 MIX_ENV=prod 在以 PORT=80 开始时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31146755/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com