server模块是nginx定义虚拟主机的核心单元,必须位于http块内,每个server块需配置listen和server_name指令;支持多实例、域名匹配、root/alias路径映射及https重定向等关键功能。

Server 模块是 Nginx 配置的核心单元,用于定义一个独立的虚拟服务器(即一个网站或服务入口),它必须写在 http 块内,一个 http 块中可包含多个 server 块。
基本结构与必需指令
每个 server 块至少要指定监听地址和端口(listen)以及主机名匹配规则(server_name),否则 Nginx 启动时会报错或无法正确路由请求。
-
listen:指定监听的 IP 和端口,如listen 80;、listen 192.168.1.10:443 ssl; -
server_name:匹配请求头中的Host字段,支持域名、IP、通配符(*.example.com)或正则(~^www\d+\.example\.com$) - 若未配置
server_name,Nginx 会使用空名称(即默认 server),但建议显式设置为server_name _;作为兜底
静态资源与根目录配置
用 root 或 alias 指定文件系统路径,配合 location 块实现 URL 到文件的映射。
-
root /var/www/html;:将请求路径拼接到该目录后查找文件,例如location /img/+ 请求/img/logo.png→ 查找/var/www/html/img/logo.png -
alias /usr/share/nginx/static/;:直接替换 location 路径,例如location /static/+ 请求/static/js/app.js→ 查找/usr/share/nginx/static/js/app.js - 常用搭配:
location / { try_files $uri $uri/ =404; },优先尝试匹配文件,再试目录,最后返回 404
HTTPS 与 SSL 配置要点
启用 HTTPS 需在 listen 中声明 ssl,并指定证书和私钥路径。
-
listen 443 ssl http2;:开启 HTTP/2(需 OpenSSL ≥ 1.0.2 且编译时启用) ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;- 建议补充安全相关配置,如
ssl_protocols TLSv1.2 TLSv1.3;、ssl_ciphers HIGH:!aNULL:!MD5;
常见组合示例(HTTP + HTTPS 重定向)
通常一个域名需要同时支持 HTTP 访问并自动跳转到 HTTPS:
- HTTP server 块只做重定向:
server { listen 80; server_name example.com; return 301 https://$server_name$request_uri; } - HTTPS server 块处理实际业务:
server { listen 443 ssl; server_name example.com; root /var/www/app; ... } - 注意:两个
server块的server_name必须一致,否则重定向后可能匹配不到目标 server











