Nginx的server_name指令支持空格分隔多个域名实现单server块多域名绑定,匹配优先级为精确>通配符>正则,HTTPS需SAN证书覆盖全部域名且依赖首个域名加载证书。

在 Nginx 配置中,server_name 指令支持在一个 server 块里匹配多个域名,核心是用**空格分隔**,不是逗号、换行或引号。
正确写法:空格分隔多个精确域名
例如:
server_name example.com www.example.com demo.example.org;
这样配置后,只要请求的 Host 请求头是其中任意一个,且 DNS 解析指向该服务器,Nginx 就会由这个 server 块处理。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 域名之间只认空格,多加逗号、引号或换行会导致语法错误或不生效
- 如果整个配置文件中只有一个
server块,server_name实际上不参与过滤——任何 Host 都会命中它 - 可通过
$host变量获取用户实际访问的域名,用于跳转、日志标记或条件逻辑
匹配优先级:精确 > 通配符 > 正则
Nginx 对 server_name 的匹配有明确顺序,遇到第一个匹配即停止:
- 先尝试完全一致的精确匹配(如
example.com) - 再匹配以
*开头的最长通配符(如*.example.com) - 接着匹配以
*结尾的最长通配符(如www.*) - 最后才检查正则表达式(必须以
~开头,如~^www\d+\.example\.com$)
注意:*.example.com 和 www.* 是合法的,但 www.*.com 或 *.example.* 是非法写法。
HTTPS 场景要特别注意证书
HTTP 层多域名没问题,但 HTTPS 下 SNI 协商阶段只依据 server_name 列表中的**首个域名**加载证书。如果证书没覆盖其余域名,浏览器会报证书错误。
- 必须使用 SAN(Subject Alternative Name)证书,把所有域名都加进
-d参数,例如:certbot -d example.com -d www.example.com -d shop.example.com - 证书本身不关心域名顺序,但 Nginx 加载时只校验首个
server_name是否在 SAN 列表中;其余域名靠 HTTP 层的$host区分 - 确保
listen 443 ssl指令在同一个server块中,并正确引用证书和私钥
常见问题与优化提示
如果配置大量或超长域名,Nginx 启动可能失败,提示 hash bucket 相关错误。
- 在
http块中调整:server_names_hash_max_size 512;server_names_hash_bucket_size 64; - 尽量优先用精确匹配,避免过度依赖通配符或正则,提升匹配效率
- 修改后务必运行
nginx -t验证语法,再执行nginx -s reload生效

















