nginx 的 server_name 默认大小写不敏感,精确匹配和通配符匹配天然忽略大小写,但正则匹配需以 ~* 开头才不区分大小写;所有匹配仅基于 host 头,与路径、协议、端口无关。

Nginx 的 server_name 默认就是大小写不敏感的,不需要额外配置。
比如你写:
server_name EXAMPLE.COM;
它能匹配 example.com、Example.Com、EXAMPLE.COM 等任意大小写组合的 Host 头。这是 Nginx 内置行为,底层对 Host 字符串做了小写归一化处理后再比对。
但要注意:这个“不敏感”只适用于精确匹配和通配符匹配,不改变正则表达式的默认行为。
正则表达式默认是区分大小写的,所以如果你用 ~^example\.com$,它就只匹配小写的 example.com,不匹配 EXAMPLE.COM。
要让正则也忽略大小写,必须显式加 *,写成:
server_name ~*^example\.com$;
或者更常见的是匹配带 www 和不带 www 的情况:
server_name ~*^(www\.)?example\.com$;
重点提醒:
- 精确匹配(如
server_name example.com;)天然不区分大小写,放心用; - 通配符(如
*.example.com)也天然不区分大小写; - 正则必须以
~*开头才不区分大小写;仅用~就是区分大小写; - 所有匹配都只看 Host 头内容,和 URL 路径、协议、端口无关。
实际配置建议统一用小写字母书写 server_name,既符合惯例,也避免自己混淆。











