必须同时满足语法正确、系统启用ipv6协议栈、网络连通性通畅三方面,才能使nginx的listen [::]:80;真正稳定生效;其中方括号为ipv6地址硬性语法要求,缺之则配置报错,且需配合双栈监听、内核参数开启、防火墙放行及https同步适配等完整措施。

直接在 server 块里加一行 listen [::]:80; 就能启用 IPv6 监听,但要真正稳定可用,得兼顾语法、系统支持和网络连通性三个层面。
监听语法必须带方括号
IPv6 地址在 Nginx 配置中必须用方括号包裹,这是硬性要求。不写括号会报错或监听失败。
-
正确写法:
listen [::]:80;(监听所有 IPv6 地址)或listen [2001:db8::1]:443 ssl;(监听指定 IPv6 地址) -
错误写法:
listen :::80;或listen 2001:db8::1:80;—— 缺少方括号,Nginx 启动时会拒绝加载配置 - 双栈部署推荐同时写两行:
listen 80;和listen [::]:80;,不要依赖ipv6only=off,尤其在 Windows 环境下该参数行为不可靠
确保宿主机已启用 IPv6 协议栈
Nginx 能配,不代表系统允许它绑定 IPv6 端口。需确认底层支持已就绪:
- 运行
ip -6 addr(Linux)或ipconfig(Windows),查看是否有 global 类型的 IPv6 地址(如2001:db8::100),避免只依赖fe80::/10这类链路本地地址 - 检查内核参数:
sysctl net.ipv6.conf.all.disable_ipv6返回值应为0;若为1,需修改/etc/sysctl.conf并执行sysctl -p - 云服务器(如阿里云、腾讯云)需额外开通实例级 IPv6 公网带宽,并在安全组中放行 IPv6 的对应端口(如 TCP 80/443)
HTTPS 场景需同步适配 IPv6
如果用了 SSL,IPv6 监听不能只写端口,证书和协议配置也要跟上:
- 监听行要包含
ssl标识:listen 443 ssl;和listen [::]:443 ssl; - SSL 证书本身无需区分 IPv4/IPv6,同一张证书可同时用于两者,但域名解析必须返回 AAAA 记录(而非仅 A 记录)
- 苹果 App Store 审核要求服务支持 IPv6-only 环境,意味着后端若只提供 IPv6 地址(如
proxy_pass http://[2001:db8::200];),Nginx 仍需能处理来自 IPv4 客户端的请求——这依赖 Nginx 主机本身的双栈能力,而非证书
验证是否生效的实用方法
别只看配置文件有没有保存,要用实际命令确认监听状态:
- 重载配置后执行:
sudo nginx -t && sudo systemctl reload nginx - 检查监听端口:
sudo ss -tln | grep ':80\|:443',应看到[::]:80或[::]:443条目(ss比netstat更轻量准确) - 从支持 IPv6 的客户端(如 IPv6 网络下的手机或电脑)访问
http://[2001:db8::1],或用curl -g http://[2001:db8::1]测试(-g参数防止 curl 把方括号误解析)











