listen 80; 或 listen 443 ssl; 可监听所有 IPv4 和 IPv6 地址,等价于 listen *:80; 与 listen [::]:80;(IPv6),默认启用双栈;显式写 listen 0.0.0.0:80; 或 listen [::]:80 ipv6only=on; 可分别限定协议栈,避免歧义。

直接写 listen 80; 或 listen 443 ssl; 就能监听所有 IP 地址,这是最常用也最简洁的方式。
listen 80 等价于监听全部 IPv4 和 IPv6
Nginx 默认把不带 IP 的端口监听解释为通配所有地址:
-
listen 80;→ 等价于listen *:80;(IPv4)和listen [::]:80;(IPv6),前提是系统支持双栈 -
listen 443 ssl;→ 同样监听所有地址的 443 端口,并启用 SSL - 若只想监听 IPv4,可显式写
listen 0.0.0.0:80;;只监听 IPv6 则写listen [::]:80;
避免歧义:明确写出通配符更稳妥
虽然省略 IP 写法简洁,但在多网卡或混合协议环境中,显式声明更易维护:
-
listen *:80;清晰表明监听所有 IPv4 接口 -
listen [::]:80 ipv6only=on;避免 IPv6 socket 意外处理 IPv4 流量 - 若同时启用 IPv4 和 IPv6 且不希望复用 socket,建议分开两个 server 块或使用
ipv6only=off(默认值)
注意 default_server 的作用范围
监听所有 IP 时,default_server 是按 ip:port 组合生效的:
-
listen 80 default_server;表示:所有发往本机任意 IP 的 80 端口请求,只要没被其他更具体的server块匹配,就由它处理 - 如果有另一个块写
listen 192.168.1.10:80;,它会优先匹配目标 IP 为192.168.1.10的请求,其余仍走default_server - 未设
default_server时,Nginx 使用第一个匹配该ip:port的server块
实际配置示例
一个典型的全 IP 监听 HTTP + HTTPS 配置:
server {
listen 80;
server_name _;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.pem;
ssl_certificate_key /etc/nginx/ssl/example.key;
root /var/www/html;
}
这个配置让 Nginx 在所有网络接口上响应 80 和 443 请求,无需指定具体 IP。


















