必须同时配置listen 80;和listen [::]:80;才能实现双栈访问,ipv6监听需用方括号包裹[::],https同理需添加listen [::]:443 ssl;,并确保系统、防火墙及云平台均启用ipv6支持。

直接在 server 块里加一行 listen [::]:80; 就行,但必须和 IPv4 的 listen 80; 并存,才能同时响应两类请求。
基础写法:双栈监听(推荐)
这是最常用也最稳妥的配置方式,让同一个 server 同时接受 IPv4 和 IPv6 请求:
-
listen 80;—— 监听所有 IPv4 地址(等价于0.0.0.0:80) -
listen [::]:80;—— 监听所有 IPv6 地址([::]是 IPv6 的通配符,类似 IPv4 的0.0.0.0)
注意:两个 listen 必须分开写,不能合并成 listen *:80 或 listen [::]:80 default_server 这类错误写法。Nginx 不支持 IPv6 通配符与 IPv4 混写在一个指令中。
HTTPS 场景也要同步加 IPv6
如果用了 SSL,443 端口同样需要双栈支持:
listen 443 ssl;listen [::]:443 ssl;
SSL 证书本身不区分 IP 版本,只要域名匹配,同一张证书可同时用于 IPv4 和 IPv6 访问。
验证是否生效
改完配置后,务必执行两步:
-
sudo nginx -t—— 检查语法是否正确 -
sudo nginx -s reload—— 重载配置(不中断服务)
然后运行 ss -tln | grep ':80\|:443' 或 netstat -tuln | grep nginx,应看到类似:
tcp6 0 0 :::443 :::* LISTEN
tcp 0 0 *:80 *:* LISTEN
tcp 0 0 *:443 *:* LISTEN
常见坑点提醒
以下情况会导致 IPv6 不生效,需逐一排查:
- 服务器系统未启用 IPv6(检查
/proc/sys/net/ipv6/conf/all/disable_ipv6是否为 0) - 防火墙未放行 IPv6 流量(如
ufw需sudo ufw allow 'Nginx Full',firewalld需firewall-cmd --add-service=http --permanent) - 云服务商未分配 IPv6 地址(如腾讯云轻量应用服务器默认不提供公网 IPv6,需确认实例支持)
- 本地测试时误用带
%的链路本地地址(如fe80::xxx%eth0),应改用全局单播地址或[::1]测试











