Nginx 的 server 块可通过 server_name 指令用空格分隔多个域名、单侧通配符(如 *.example.com)或正则(以 ~ 开头)实现多域名响应,但需确保 DNS 解析正确、Host 头匹配,并使用覆盖全部域名的 SAN 或泛域名证书。
在 Nginx 中,一个 server 块支持同时响应多个域名,关键就在 server_name 指令的写法——不是靠堆砌多个 server 块,而是用空格把域名列在一起,并合理使用通配符或正则。
这是最常用也最稳妥的方式。所有要指向同一站点的域名,写在同一行,中间只用空格隔开,不能加逗号、引号或换行:
server_name example.com www.example.com demo.site app.demo.site;Host 头必须与其中任一完全匹配(大小写不敏感)server 块,Nginx 会默认命中它,不管 Host 是什么Nginx 只允许单侧通配符,且只能出现在最左或最右,不能嵌套、不能多处出现:
*.example.com(匹配 www.example.com、api.example.com)example.*(匹配 example.com、example.cn)www.*.com、*.example.*、www..com
example.com *.example.com,兼顾主域和所有子域以 ~ 开头表示正则,可用于动态提取域名或统一处理多级结构:
server_name ~^(www.)?(.+)$; —— 匹配任意带或不带 www 的域名,捕获主域名到 $2
server_name ~^([a-z0-9-]+).example.com$; —— 匹配所有合法二级子域nginx -t 测试语法,避免配置加载失败多个域名共用一个 server 块时,SSL/TLS 证书必须能覆盖全部域名:
*.example.com,但注意它不包含 example.com 主域(除非显式加入)example.com 的证书能自动保护 blog.example.com