先在终端下输入以下指令,看看输出结果有没有–with-ipv6,没有的话就需要重新编译带有ipv6支持的nginx了。
nginx -V |
编译nginx就不在这里说了,下面讲一下正确地配置nginx让其同时监听IPv4和IPv6的端口(包括http协议的80和https协议的443端口),同时介绍一下只监听IPv6和特定IPv6地址的方法。
我想同时监听IPv4和IPv6地址
编辑/etc/nginx/conf.d/default.conf,将server段的listen语句改成:
listen [::]:80; |
网上很多中文教程写的是listen :80 [::]:80,简直坑死人……只需要listen [::]:80就可以了,Nginx会同时监听IPv4和IPv6的80端口,如果再写IPv4地址的80端口就会出现重复绑定的错误。
06 Nov. 2014 Update
从Nginx 1.3 的某个版本起,默认ipv6only是打开的,也就是上面的语句只会监听IPv6的端口而不会监听IPv4的端口。虽然Linux系统默认是监听IPv6的某个端口会同时监听对应的IPv4的端口,但是FreeBSD是默认分开IPv6和IPv4的。所以为了一致性的考虑(新版本Nginx必须推荐这样做),请使用分开监听的方法:
listen 80; listen [::]:80 ipv6only=on; |
我只想监听IPv6地址,不想监听IPv4地址
没问题,将listen写成:
listen [::]:80 default ipv6only=on; |
我想监听一个指定的IPv6地址
和IPv4指定地址一样,就在listen里写上完整的地址就OK了!以一个IPv6地址为例:
listen [2607:f0d0:1002:51::4]:80; |
我想要IPv6监听SSL(443)端口
编辑你原来监听443端口的配置文件,如/etc/nginx/conf.d/ssl.conf,修改listen语句为:
listen [::]:443 ssl; |
后面的ssl可省掉。443端口的其它用法和80端口一样,这里就不赘述了。
修改完成后,必须重启nginx服务(reload是不行的):
service nginx restart |
最后的最后,IPv6大部分都还是教育网的筒子们吧?本博客是支持IPv6访问的哦!如果默认的DNS不给解析的话,可以在hosts文件里添加下面两行:
2604:180::728f:8d23 www.librehat.com 2604:180::728f:8d23 librehat.com |
参考文章: How to enable Nginx IPv6 support
via。https://www.librehat.com/the-right-way-to-setup-nginx-monitor-ipv6-address-port/