必须同时配置listen 80;和listen [::]:80;才能实现稳定双栈,仅ipv6监听会使ipv4用户无法访问;需确认系统启用ipv6、nginx编译支持ipv6及网卡分配有效公网ipv6地址。

直接在 server 块里加一行 listen [::]:80; 就能支持 IPv6 客户端访问,但要真正稳定可用,必须配合 IPv4 一起配置、确认系统环境就绪,并注意语法细节。
双栈监听是必须的配置方式
只写 listen [::]:80; 会导致 IPv4 用户完全无法访问。正确做法是 IPv4 和 IPv6 监听并存:
-
listen 80;—— 等价于listen 0.0.0.0:80;,监听所有 IPv4 地址 -
listen [::]:80;—— 方括号不可省,::表示 IPv6 通配地址(类似 0.0.0.0) - HTTPS 同理:同时写
listen 443 ssl;和listen [::]:443 ssl;
配置前必须验证的三项基础条件
Nginx 能否真正绑定 IPv6,不只看配置,还要看底层是否就位:
- 系统 IPv6 协议栈已启用:
cat /proc/sys/net/ipv6/conf/all/disable_ipv6返回 0 - Nginx 编译时支持 IPv6:运行
nginx -V 2>&1 | grep -i ipv6,新版(≥1.19)应有 IPv6 support: enabled 或无报错 - 服务器网卡已分配有效 IPv6 地址:
ip -6 addr show中能看到inet6 .../64类似条目(非仅fe80::/64链路本地地址)
Windows 与 Linux 的关键差异点
Windows 下需额外注意防火墙和地址解析问题:
- Windows 防火墙默认不放行 IPv6 入站,必须手动新建入站规则,协议选 TCP、端口填 80/443,并勾选「公用」网络
- 本地测试用
http://[::1]/,若失败可尝试带接口标识的格式:http://[fe80::1%本地连接]/(先用netsh interface ipv6 show interfaces查接口索引) - 不建议在 Windows 上使用
ipv6only=off,行为不稳定;坚持用分开写的双 listen 更可靠
验证是否生效的实用方法
改完配置别急着上线,用这几步快速确认:
- 语法检查:
nginx -t必须返回 success - 查看监听状态:
ss -tuln | grep ':80\b'应同时看到0.0.0.0:80和[::]:80 - 从纯 IPv6 网络(如校园网、部分 5G 热点)用手机或电脑访问你的域名,观察能否加载
- 公网验证可借助 ipv6-test.com 输入域名,看 HTTP 响应是否正常











