listen 指令用于定义 Nginx server 块监听的 IP 地址和端口,支持 IPv4/IPv6、多地址共存、default_server、ssl、http2 等参数,是实现 IP/端口型虚拟主机的核心,需注意权限、重复配置及系统协议支持。

listen 指令是 Nginx 配置中定义服务器监听地址和端口的核心指令,它直接决定该 server 块响应哪些网络请求。正确使用 listen 是实现基于 IP、端口或域名的虚拟主机(Virtual Host)的前提。
绑定特定 IP 和端口
默认情况下,listen 80; 表示监听本机所有 IPv4 地址的 80 端口(即 0.0.0.0:80)。若只想让某个 server 块响应来自特定网卡或 IP 的请求,需显式指定 IP:
-
listen 192.168.1.100:80;—— 仅接收发往该 IP 的 HTTP 请求 -
listen 127.0.0.1:8080;—— 仅本地进程可访问,常用于反向代理后端 -
listen [::1]:8080;—— IPv6 回环地址(注意方括号语法)
多个 listen 可共存于同一 server 块,例如同时监听 IPv4 和 IPv6:
listen 80; listen [::]:80;
区分基于 IP 和端口的虚拟主机
当不同站点使用不同 IP 或不同端口时,Nginx 依靠 listen 指令路由请求,无需依赖 server_name:
- 两个站点分别配置为
listen 192.168.1.10:80;和listen 192.168.1.11:80;,即为基于 IP 的虚拟主机 - 同一 IP 下用不同端口:如
listen 192.168.1.10:8080;和listen 192.168.1.10:8081;,即为基于端口的虚拟主机
此时即使 server_name 相同或未设置,Nginx 也能准确分发请求。
常用 listen 参数与行为控制
listen 后可附加参数,影响监听行为:
-
default_server:标记该server为该 IP:Port 组合的默认服务,匹配不到其他server时兜底 -
ssl:启用 HTTPS,需配合ssl_certificate等指令(如listen 443 ssl;) -
http2:开启 HTTP/2 支持(如listen 443 ssl http2;) -
reuseport:允许内核将连接分发到多个 worker 进程(Linux 3.9+,提升高并发性能)
例如:listen 443 ssl http2 default_server; 表示这是该端口的默认 HTTPS 服务,并启用 HTTP/2。
注意事项与常见问题
配置 listen 时需注意以下几点:
- 若监听非特权端口(如 8080),无需 root 权限;但监听 1–1023 端口时,Nginx 主进程需有绑定权限(通常需 root 启动)
- 同一 IP:Port 组合不能被多个
server块同时声明为default_server,否则启动报错 - 未指定 IP 时,IPv4 默认为
0.0.0.0,IPv6 默认为[::];若系统未启用 IPv6,[::]:80可能导致启动失败 - 使用
netstat -tlnp | grep :80或ss -tlnp | grep :80可验证实际监听状态
不复杂但容易忽略。

















