全局设置ipv6only =closures

由于更新我的nginx服务器只能通过IPv6而不是IPv4,而我的configuration包含

listen [::]:80 default_server; 

现在我已经改变了

 listen [::]:80 default_server ipv6only=off; 

并且服务器再次通过IPv4可用。 这是由于nginx 1.3.4(“使用nginx 1.3.4进行更改”)中的更改所致。

因为我在同一个mashine上有多个服务器configuration,所以我想ipv6only=off全局设置ipv6only=off有没有可能这样做?

我刚从1.0升级到1.4。

由于只有一个监听器实际上绑定到任何给定的端口,所以在任何一个 listen指令中指定ipv6only=off就足够了。

所以,在我的默认server块,我有:

  listen [::]:80 ipv6only=off default_server; 

  listen [::]:443 ipv6only=off default_server; 

所有其他的server块只是指定原始的listen指令。 它的工作原理 任何虚拟主机都可以通过IPv4或IPv6访问。

你也可以将它添加到所有这些,但这不是必需的。 将它添加到其中任何一个就足够了。

但是,因为ipv6only=标志是仅限于Linux,所以我不再使用这个构造。 我当前的指令明确指定了IPv4和IPv6,例如:

 listen [::]:80 default_server; listen 80 default_server; 

@迈克尔汉普顿的答案(但你必须触及所有文件)的替代方法是插入

 listen 80; # listen for IPv4 listen [::]:80; # listen for IPv6 

为所有服务器。


奇怪的是,插入listen [::]:80 ipv6only=off多个服务器的结果

 nginx: [emerg] duplicate listen options for [::]:80 in /etc/nginx/sites-enabled/default.conf:3 

listen 80;的组合listen 80;ipv6only=off (在不同的服务器)结果

 nginx: [emerg] bind() to [::]:80 failed (98: Address already in use) nginx: [emerg] bind() to [::]:80 failed (98: Address already in use) nginx: [emerg] bind() to [::]:80 failed (98: Address already in use) nginx: [emerg] bind() to [::]:80 failed (98: Address already in use) nginx: [emerg] bind() to [::]:80 failed (98: Address already in use) nginx: [emerg] still could not bind()