nginx的server块以listen和server_name为最核心参数:listen指定监听地址与端口(如listen 80;或listen 192.168.1.100:80;),server_name匹配请求host头以路由至对应虚拟主机(如server_name example.com www.example.com;),二者共同决定请求能否抵达及由哪个配置块处理。

Nginx 的 server 块是定义单个虚拟主机的核心单元,其中最基础、最关键的运行参数就是监听端口(listen)和主机标识(server_name)。这两项决定了请求能否抵达、由哪个配置块处理。
listen 指令:明确监听地址与端口
listen 是 server 块的必需指令之一,用于指定 Nginx 接收请求的网络入口。它支持多种写法,实际效果取决于部署场景:
-
listen 80;—— 监听本机所有 IPv4 和 IPv6 地址的 80 端口(等价于listen *:80;) -
listen 127.0.0.1:8080;或listen localhost:8080;—— 仅允许本地进程访问,适合开发或内部服务 -
listen 192.168.1.100:80;—— 限定只监听指定局域网 IP,增强隔离性 -
listen 443 ssl;—— 启用 HTTPS,需配合ssl_certificate和ssl_certificate_key使用
server_name:区分不同域名或 IP 的请求
当多个 server 块监听同一端口时,Nginx 依靠 server_name 匹配 Host 请求头来路由请求:
-
server_name example.com;—— 只响应 Host 头为example.com的请求 -
server_name www.example.com example.com;—— 支持多个域名 -
server_name _;—— 通配符,匹配所有未显式声明的域名(常作兜底 server) - 留空或不写
server_name—— Nginx 会以空字符串匹配,通常用于仅靠 IP 访问的场景
基础 server 块示例(含最小必要配置)
以下是一个可直接运行的最简 HTTP server 配置:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
说明:
- 必须有
listen,否则该 server 不生效 -
server_name虽非强制,但缺省时行为依赖匹配顺序,建议显式设置 -
location /定义根路径行为,root指向静态文件目录,index指定默认首页
多端口共存的两种常见方式
根据是否需要差异化响应,选择合适结构:
-
同一 server 块监听多个端口:适用于完全一致的路由与内容
listen 80;<br>listen 8080;
—— 浏览器访问http://host/或http://host:8080/都走相同配置 -
多个独立 server 块:适用于不同端口对应不同站点或协议
一个监听80(HTTP),另一个监听443 ssl(HTTPS),或分别指向不同root目录











