Nginx 监听 IPv6 地址的配置方法

先在终端下输入指令 nginx -V ,看看输出结果有没有–with-ipv6,没有的话就需要重新编译带有ipv6支持的nginx了。

编译nginx就不在这里说了,下面讲一下正确地配置nginx让其同时监听IPv4和IPv6的端口(包括http协议的80和https协议的443端口),同时介绍一下只监听IPv6和特定IPv6地址的方法。


同时监听IPv4和IPv6地址

从 Nginx 1.3 的某个版本起,默认 ipv6only 是打开的。虽然 Linux 系统默认是监听 IPv6 的某个端口会同时监听对应的 IPv4 的端口,但是 FreeBSD 是默认分开 IPv6和 IPv4 的。所以为了一致性的考虑(新版本 Nginx 必须推荐这样做),请使用分开监听的方法。

编辑网站的配置文件 /etc/nginx/conf.d/default.conf,将 server 段的 listen 语句改成:

1
2
listen 80;
listen [::]:80;

如果开启了 ssl 和 http2 ,可以改成:

1
2
listen 443 ssl http2;
listen [::]:443 ssl http2;

只监听 IPv6 地址,不监听 IPv4 地址

没问题,将 listen 写成:

1
listen [::]:80 default ipv6only=on;

监听一个指定的IPv6地址

和 IPv4 指定地址一样,就在 listen 里写上完整的地址就 OK 了!以一个 IPv6 地址为例:

1
listen [2607:f0d0:1002:51::4]:80;

修改完成后,必须重启nginx服务(reload是不行的):

1
service nginx restart

参考资料:Nginx监听IPv6地址端口的正确操作方法