一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Nginx 如何在 Virtual Host 中配置唯一的 server_name 标识站点

时间:2026-08-08 09:31:54 编辑:袖梨 来源:一聚教程网

Nginx 中 server_name 唯一标识站点的关键是确保所有 server 块中该指令的域名组合不重复且精准匹配 Host 头;需明确声明主域名与别名、避免通配符/正则误匹配、设 default_server 兜底、按文件隔离配置并用 nginx -t 和 nginx -T 验证。

要让 Nginx 在 Virtual Host 中用 server_name 唯一标识一个站点,关键不是“只写一个域名”,而是确保该 server_name 的组合在所有 server 块中不重复,并能准确匹配实际请求的 Host 头。

明确声明主域名和常用别名

一个站点通常有主域名(如 example.com)和常见变体(如带 www 的 www.example.com)。把这些都写进同一个 server_name 指令,用空格分隔:

  1. server_name example.com www.example.com;
  2. 这样两个域名都指向同一站点,但仍是“唯一标识”——因为其他 server 块不能也用这两个域名
  3. 避免把不同站点的域名混在同一行,否则就失去区分意义

避免通配符或正则覆盖其他站点

通配符(如 *.example.com)或正则(如 ~^www.(.+)$)虽灵活,但容易意外匹配到本不该归入该站点的请求:

  1. 如果已有 site1.example.comsite2.example.com 两个独立站点,就不要用 *.example.com 统一匹配
  2. 正则需加锚点和边界控制,例如 ~^api.example.com$~^api. 更安全
  3. 优先用精确域名,仅在子域名管理复杂时谨慎引入通配符

设 default_server 处理未匹配请求

当请求的 Host 头不匹配任何 server_name,Nginx 会交给第一个监听相同端口的 server 块处理——这可能导致误响应。显式指定默认站点更可控:

  1. 在某个 server 块中加上 listen 80 default_server;
  2. 这个块的 server_name 可留空或设为 "",但必须有 default_server 标志
  3. 它不参与域名匹配,只兜底,因此不会干扰其他站点的“唯一标识”逻辑

检查配置加载顺序与文件组织

Nginx 按字典序读取 /etc/nginx/conf.d/*.conf,若多个配置文件里出现相同 server_name,后加载的会覆盖前一个,但实际行为取决于匹配优先级,易引发不可预期路由:

  1. 每个站点建议单独一个配置文件(如 example.com.conf),文件名不含特殊字符
  2. 运行 nginx -t 验证语法,再用 nginx -T | grep "server_name" 查看最终生效的全部 server_name 列表
  3. 确认没有重复条目,尤其注意大小写、多余空格或隐藏字符

热门栏目