<p>~* 是 Nginx 中不区分大小写的正则匹配修饰符,直接忽略 URI 字母大小写;需转义特殊字符,按配置顺序匹配,优先级低于 = 和 ^~。</p>

在 Nginx 中,~* 是用于定义**不区分大小写的正则匹配**的 location 修饰符,它本身就能忽略字母大小写,不需要额外配置或转义。
~* 的作用和基本用法
~* 表示该 location 块使用正则表达式进行匹配,且匹配过程**忽略 URI 中字母的大小写**。这与区分大小写的 ~ 形成对比。
-
location ~ \.php$ { ... }:只匹配.php(小写),不匹配.PHP或.Php -
location ~* \.php$ { ... }:匹配.php、.PHP、.Php、.PhP等所有大小写变体
常见写法与注意事项
使用 ~* 时需注意语法正确性和优先级规则:
- 正则表达式必须写在空格之后,例如
location ~* \.(jpg|jpeg|png|gif)$ - 括号、点号、美元符等特殊字符需按 PCRE 规则转义(如
\.匹配字面量点) -
~*的优先级低于精确匹配(=)和前缀匹配(^~),但高于普通前缀匹配(/xxx) - 多个
~*location 之间按**配置文件中出现的顺序**匹配,第一个成功匹配的即生效
实用示例:统一处理静态资源大小写
假设希望让所有图片请求(无论扩展名大小写)都走缓存并禁止执行脚本:
location ~* \.(jpg|jpeg|png|gif|webp|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
# 防止意外执行(尤其上传目录)
deny all;
}这样访问 /logo.JPG、/banner.PNG、/icon.Svg 都会命中该规则。
验证是否生效的小技巧
修改配置后务必重载 Nginx,并可通过以下方式快速验证:
- 用
curl -I http://your.site/test.JPEG查看响应头是否包含你设置的Cache-Control - 检查 Nginx 错误日志(
error_log)是否有正则编译错误,比如忘记转义点号导致~* .jpg$被误认为匹配任意字符 - 用
nginx -T输出完整生效配置,确认目标 location 块已被加载


















