nginx 监听 IPv6 端口

我一直以为,我的 VPS 配置了 IPv6,在 DNS 记录中添加了 AAAA 解析就可以完成双栈网络的架设,然而在数次测试中,IPv6 地址一直都无法正常解析。现在才发现,nginx 需要调整一些配置才能正常地监听 IPv6 端口。

正常情况下,我们的 nginx.conf 文件中会有这样的两行:

listen 80;
listen 443 ssl http2;

这种情况下,实际上是无法监听 IPv6 端口的,我们需要添加如下两行:

listen [::]:80 ipv6only=on;
listen [::]:443 ipv6only=on ssl http2;

运行 systemctl restart nginx (service nginx restart) 之后,就可以正常监听 IPv4 和 IPv6 的端口了,我们可以用 netstat 来确认一下:

# netstat -nlp | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      9396/nginx.conf 
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      9396/nginx.conf 
tcp6       0      0 :::80                   :::*                    LISTEN      9396/nginx.conf 
tcp6       0      0 :::443                  :::*                    LISTEN      9396/nginx.conf 

之前是没有下面两行监听的,现在有了,说明配置成功。

Update:

在最近的配置中,发现 ipv6only 这个选项是不需要的,根据 nginx 的文档,这个选项默认值就是 on,以及这个选项在整个 nginx 配置文件中只能设置一次,所以如果有多个 vhost,这样设置反而会导致错误。

发表评论

电子邮件地址不会被公开。