nginx ipv6支持需同时满足编译启用(≤1.18加--with-ipv6,≥1.19默认)、系统开启ipv6协议栈(/proc/sys/net/ipv6/conf/all/disable_ipv6=0)、配置中添加listen [::]:80等指令。

Nginx 默认编译版本大多已内置 IPv6 支持,但前提是编译时启用了 --with-ipv6(旧版)或更现代的自动检测机制(1.19+ 版本起该选项已被移除,IPv6 成为默认能力)。是否真正支持,不能只看版本号,而要验证实际配置和运行环境。
确认当前 Nginx 是否已支持 IPv6
执行以下命令检查编译参数:
nginx -V 2>&1 | grep -i ipv6
如果输出中包含 --with-ipv6(旧版)或无报错且后续能成功监听 [::]:80(新版),说明支持。若完全无输出或提示“unknown option”,则需重新编译。
编译安装时启用 IPv6 支持(适用于源码安装)
如果你从源码安装 Nginx,确保在 ./configure 阶段显式启用 IPv6 相关能力(尤其使用较老版本如 1.18 或更早):
- 对于 Nginx ≤ 1.18:添加
--with-ipv6 - 对于 Nginx ≥ 1.19:无需手动加该参数,IPv6 已默认启用,但需确保系统环境就绪
典型编译命令示例(含常用模块):
./configure \ --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-http_gzip_static_module \ --with-http_stub_status_module \ --with-ipv6 # 仅 1.18 及以前必需,1.19+ 可省略
之后执行 make && make install 即可。
关键前提:系统层必须启用 IPv6 协议栈
Nginx 能否监听 IPv6,不只取决于自身编译选项,更依赖操作系统底层支持:
- 检查内核是否启用:
cat /proc/sys/net/ipv6/conf/all/disable_ipv6—— 返回 0 才表示开启 - 若返回 1,需编辑
/etc/sysctl.conf,加入两行:net.ipv6.conf.all.disable_ipv6 = 0 net.ipv6.conf.default.disable_ipv6 = 0
然后运行
sysctl -p生效 - 确认网卡已分配 IPv6 地址:
ip -6 addr show,应能看到inet6 .../64或类似 global 地址
配置文件中正确监听 IPv6(部署环节)
即使编译支持、系统开启,仍需在 server 块中显式添加 IPv6 监听指令:
- HTTP 服务:
listen [::]:80; - HTTPS 服务:
listen [::]:443 ssl; - 推荐双栈写法(同时支持 IPv4 和 IPv6):
listen 80; listen [::]:80;
注意:
[::]是 IPv6 通配地址,方括号不可省略;ipv6only=off在新版中已默认生效,一般无需额外指定











