nginx的server块必须嵌套在http块内,是实现多站点托管的核心单元;通过listen指定端口与协议,server_name匹配host请求头实现域名路由,root与location协同定义资源路径和转发逻辑。

Nginx 的 server 块是实现多站点托管和请求分发的核心,必须放在 http 块内部,不能独立存在。配置的关键在于明确监听端口、匹配域名、定义资源路径和路由规则。
server 块必须嵌套在 http 块中
Nginx 配置是层级结构,server 块属于 http 上下文的子块。错误地把它写在 events 外或 http 外会导致启动失败。标准位置如下:
http {
include mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name example.com;
root /var/www/example;
index index.html;
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.crt;
ssl_certificate_key /etc/nginx/ssl/example.key;
root /var/www/example;
index index.html;
}
}
listen 指令决定端口与协议行为
它告诉 Nginx 在哪个端口、IP 和协议上接收请求:
-
listen 80;:监听所有 IPv4 地址的 80 端口 -
listen [::]:80;:同时监听 IPv6 的 80 端口 -
listen 443 ssl;:启用 HTTPS,必须配合证书指令 -
listen 80 default_server;:该端口无匹配时的兜底配置(仅一个 server 可设) -
listen 192.168.1.10:80;:只监听指定 IP,适合多网卡服务器
server_name 匹配 Host 请求头
Nginx 不看 URL,而是提取 HTTP 请求头中的 Host: 字段做比对:
-
server_name example.com;→ 精确匹配 -
server_name www.example.com example.com;→ 支持多个域名 -
server_name *.example.com;→ 通配符匹配子域名(不支持前缀如www.*.com) -
server_name ~^www\d+\.example\.com$;→ 正则匹配(以~开头)
注意:空 server_name 或 server_name _; 是常见占位写法,但实际靠 default_server 或第一个块兜底。
root 与 location 搭配决定文件服务逻辑root 定义整个 server 的根目录,location 在其基础上细化路径映射:
root /var/www/site;+location /api/ { proxy_pass http://backend; }
→/api/xxx转发,其余静态文件从/var/www/site/下找location /static/ { alias /data/assets/; }
→ 请求/static/logo.png直接读取/data/assets/logo.png(注意alias末尾斜杠必须一致)安全提示:用
alias替代root处理特定路径,可天然防止../目录遍历(如/static/../etc/passwd会 404)
配置完成后务必执行 nginx -t 测试语法,再 nginx -s reload 生效。多个 server 块之间完全隔离,互不影响。











