【发布时间】:2018-01-23 10:01:19
【问题描述】:
我目前正在配置一个能够处理 IPv6 地址的软件,我还配置了 Nginx docker 映像,以便它可以同时处理 IPv4 和 IPv6 地址。我遇到的问题是我不确定要部署软件的主机是否启用了 IPv6。
问题是,只要主机中未启用 IPv6,就会导致以下错误。
nginx: [emerg] socket() [::]:8080 failed (97: Address family not supported by protocol)
2018/01/23 10:53:08 [emerg] 1#1: socket() [::]:8080 failed (97: Address family not supported by protocol)
我想要实现的是,即使主机没有启用 IPv6,nginx 也会忽略所有 IPv6 并简单地转到 IPv4。我找到的一种解决方案是使用 nginx docker 存储库中讨论的环境变量 (envsubsts),并使用 docker-compose 文件来设置端口和地址。但是,此解决方案将需要手动更改 docker-compose 文件,具体取决于是否启用了 IPv6。
任何帮助或建议都可以。谢谢!
这是我的 nginx 配置中处理 IPv6 和 IPv4 的部分。
server {
listen [::]:8080 ssl ipv6only=off;
server_name localhost;
ssl on;
ssl_certificate /etc/nginx/cert.pem;
ssl_certificate_key /etc/nginx/key.pem;
...
...
}
}
我也尝试将 IPv4 和 IPv6 分开,但仍然导致问题。
listen 8080 ssl;
listen [::]:8080 ssl ipv6only=on;
【问题讨论】:
-
我不认为它是这样工作的。 docs.docker.com/engine/userguide/networking/default_network/… 据此,您的主机需要支持/启用它。
-
是的。但是我们没有太多的权限来为我们客户的机器启用 IPv6。您是否知道一种方法,以便 nginx 在需要时将侦听部分动态更改为 IPv4。