gpt4 book ai didi

ipv6 - 如何让 Phoenix 监听 IPv6?

转载 作者:行者123 更新时间:2023-12-02 03:33:12 27 4
gpt4 key购买 nike

我正在努力寻找有关让 Phoenix(以及 Cowboy 和 Ranch)同时监听 IPv4 和 IPv6 的信息。

我在 Ubuntu 16.04 的 VPS 上运行。它同时具有 IPv4 和 IPv6 地址。运行 netstat -tulpn 时,它显示 beam 仅监听 IPv4,并使用 Phoenix 配置中指定的端口。而其他进程(例如 epmd)能够监听 IPv4 和 IPv6。

我尝试在 config.exs 中指定类似 "::4000" 的端口,但由于无法解析为整数而崩溃。

有人能指出我正确的方向吗?我需要以某种方式添加自定义牛仔监听器吗?

我宁愿不必在前面运行 Nginx 来监听 IPv6 流量。

我尝试过的配置:

config :my_app, MyApp.Endpoint,
http: [port: "[::]:4000"]

堆栈跟踪(看起来 Phoenix 仅需要一个整数端口):

** (Mix) Could not start application my_app: MyApp.start(:normal, []) returned an error: shutdown: failed to start child: MyApp.Endpoint
** (EXIT) shutdown: failed to start child: Phoenix.Endpoint.Server
** (EXIT) an exception was raised:
** (ArgumentError) argument error
:erlang.binary_to_integer("[::]:4000")
(phoenix) lib/phoenix/endpoint/server.ex:32: Phoenix.Endpoint.Server.to_port/1
(phoenix) lib/phoenix/endpoint/server.ex:28: Phoenix.Endpoint.Server.default/3
(phoenix) lib/phoenix/endpoint/server.ex:17: anonymous fn/5 in Phoenix.Endpoint.Server.init/1
(elixir) lib/enum.ex:1623: Enum."-reduce/3-lists^foldl/2-0-"/3
(phoenix) lib/phoenix/endpoint/server.ex:15: Phoenix.Endpoint.Server.init/1
(stdlib) supervisor.erl:294: :supervisor.init/1
(stdlib) gen_server.erl:328: :gen_server.init_it/6
(stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3

这也是 Phoenix {:phoenix, "~> 1.2.0"} 和 Cowboy {:cowboy, "~> 1.0"}

最佳答案

根据https://hexdocs.pm/phoenix/endpoint.html您也可以仅使用 :inet6。这对我有用:

config :my_app, MyApp.Endpoint,
http: [:inet6, port: 4000],

关于ipv6 - 如何让 Phoenix 监听 IPv6?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39606428/

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