server_name用于匹配HTTP请求头中的Host字段,支持精确域名、通配符(如*.example.com)、正则表达式(以~开头)及空字符串或IP地址,匹配遵循完全一致原则(通配符/正则除外),需避免非法字符和重复定义。
server_name 用于定义当前 server 块响应哪些域名(或 IP)的请求,核心是匹配 HTTP 请求头中的 Host 字段。写法灵活,但需注意匹配逻辑和优先级。
最常用、最明确的方式是直接写域名:
server_name example.com; → 只响应 Host: example.com
server_name www.example.com example.com; → 同时匹配两个 Host,空格分隔,顺序无关通配符 * 只能放在开头或结尾,不能中间使用;正则以 ~ 开头:
server_name *.example.com; → 匹配 www.example.com、api.example.com,但不匹配 example.com
server_name example.*; → 匹配 example.com、example.org
server_name ~^wwwd+.example.com$; → 正则匹配 www1.example.com、www99.example.com
当客户端没发 Host 头(如直接用 IP 访问),Nginx 会交给默认 server(通常是第一个或带 default_server 标志的);若想显式处理:
server_name ""; → 匹配空 Host 头(比如 curl -H "Host:" http://ip)server_name 192.168.1.100; → 显式匹配该 IP(实际中较少单独依赖此项,Host 头才是关键)匹配不是“包含”,而是完全一致(通配符/正则除外);多个 server_name 行等价于写在同一行;大小写不敏感;未匹配到时由默认 server 处理:
server_name www.example.com/; —— 斜杠非法,会启动失败nginx -t 检查语法,再 nginx -s reload