server区块是nginx定义虚拟主机的核心,必须置于http块内,通过listen和server_name区分不同域名/端口/ip;支持多域名共用、ssl跳转、反向代理等配置,修改后需nginx -t校验并reload生效。

Server区块是Nginx中定义虚拟主机的核心部分,用于区分不同域名、端口或IP的网站服务。它必须写在http块内部,一个http块可包含多个server块,彼此独立运行。
Server区块的基本写法和必要配置
每个server块至少要明确监听地址和主机名,否则Nginx无法识别请求应由哪个虚拟主机处理:
-
listen:指定监听的端口和可选IP,例如
listen 80;或listen 192.168.1.10:443 ssl; -
server_name:定义匹配的域名,支持精确匹配(
example.com)、通配符(*.example.com)和正则(~^www\d+\.example\.com$) - 若未配置server_name,Nginx会将该server作为默认主机(当其他server都不匹配时响应)
多个域名共用一个server块的方法
不需要为每个子域名单独写一个server块,可以用空格分隔多个名称:
server_name example.com www.example.com blog.example.com;- 所有这些域名都会被这个server块接管,共享相同的location、root、SSL等配置
- 注意:通配符
*.example.com不匹配根域名example.com,需显式列出
常见组合场景与配置要点
实际部署中,server块常配合SSL、重定向、静态资源路径等使用:
- HTTP自动跳转HTTPS:
return 301 https://$host$request_uri;放在80端口的server里 - 静态站点配置:
root /var/www/example;+index index.html; - 反向代理后端服务:
location /api/ { proxy_pass http://backend; },其中backend在upstream块中定义 - 避免重复监听同一端口+IP组合,否则Nginx启动会报错
如何验证server配置是否生效
修改后务必检查语法并重载,再确认请求是否命中预期server:
- 执行
nginx -t检查配置合法性 - 执行
nginx -s reload平滑重载配置 - 用
curl -H "Host: example.com" http://127.0.0.1模拟特定域名请求,观察响应头或页面内容 - 查看access日志中
$server_name字段,确认Nginx记录的是哪个server处理了请求











