Nginx监听IPv6地址端口的正确操作方法

先在终端下输入以下指令,看看输出结果有没有–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

Author: librehat

自由軟體萬歲!

One thought on “Nginx监听IPv6地址端口的正确操作方法”

Comments are closed.