server块必须写在http块内部,用于定义独立虚拟主机,通过listen和server_name区分请求;一个http块可含多个并列server块,每个至少需listen指令,且配置后须用nginx -t验证、nginx -s reload重载。

在 Nginx 中,server 块必须写在 http 块内部,用来定义一个虚拟主机(Virtual Host)。每个 server 块代表一个独立的网站或服务入口,通过监听的端口、域名(server_name)等条件区分请求归属。
基本结构:http 块内嵌 server 块
确保你的配置符合层级关系:http → server → location。不能把 server 块写在 http 外面,也不能直接放在全局(main)上下文中。
-
http块通常位于/etc/nginx/nginx.conf或被include进来的文件中 - 一个
http块里可以有多个server块,彼此并列 - 每个
server必须至少包含listen和server_name(或靠默认匹配)
最小可用的 server 块示例
以下是一个监听 80 端口、响应 example.com 请求的基础配置:
http {
server {
listen 80;
server_name example.com www.example.com;
location / {
root /var/www/example;
index index.html;
}
}
}
注意:root 指令在 server 或 location 中都可设;若同时存在,location 内的优先级更高。
支持多域名、多端口和 HTTPS 的常见组合
一个 server 块可通过多个 server_name 支持不同域名;也可用多个 server 块分别处理 HTTP 和 HTTPS 流量:
- HTTP 跳转到 HTTPS:
listen 80; return 301 https://$host$request_uri; - HTTPS 配置需额外指定证书:
ssl_certificate和ssl_certificate_key - 监听非标准端口(如 8080)时,客户端需显式访问
http://example.com:8080
验证与重载配置
写完后务必检查语法再重载,避免服务中断:
- 测试配置是否合法:
nginx -t - 平滑重载配置(不中断连接):
nginx -s reload或systemctl reload nginx - 查看生效的 server 块:
nginx -T | grep -A5 'server {'(显示完整展开后的配置)











