<p>Nginx中匹配静态文件后缀最常用高效方式是正则location(~或~)配合$锚定结尾,如location ~</em> .js$;需设置expires、add_header等优化缓存与安全,并注意匹配优先级及root/alias区别。</p>

在 Nginx 中,用 location 匹配特定静态文件后缀(比如 .js、.css、.png),最常用且高效的方式是使用**后缀匹配语法**(即以 ~ \.xxx$ 或 ~* \.xxx$ 形式),配合 expires、add_header、root 或 alias 等指令做针对性优化。
用正则 location 精确匹配后缀
推荐使用区分大小写的正则匹配(~)或不区分大小写的正则匹配(~*),并用 $ 锚定结尾,避免误匹配路径中的点号(如 /assets/js/main.js?v=1.0 中的 ?v=1.0 不影响匹配):
-
location ~* \.js$ { ... }→ 匹配所有以.js结尾的请求(不区分大小写) -
location ~ \.css$ { ... }→ 匹配以小写.css结尾的请求(区分大小写) -
location ~* \.(png|jpg|gif|webp|svg)$ { ... }→ 同时匹配多种图片后缀
常见实用配置示例
匹配后通常要设置缓存、禁止执行、指定根目录等。例如:
- 为静态资源启用长期缓存:
location ~* \.(js|css|png|jpg|gif|ico|woff2?)$ {<br> expires 1y;<br> add_header Cache-Control "public, immutable";<br>} - 禁止用户执行上传的脚本类文件(安全加固):
location ~* \.(php|pl|py|sh|rb|lua)$ {<br> return 403;<br>} - 将静态资源指向独立目录(注意
root和alias的区别):location ~* \.pdf$ {<br> alias /var/www/static/docs/;<br> # 注意:alias 要求末尾带 /,且不拼接完整 URI<br>}
注意 location 匹配优先级
Nginx 的 location 匹配有明确优先级顺序,对后缀匹配尤其关键:
- 精确匹配(
=)最高优先级 - 前缀字符串匹配(
location /static/)次之 - 正则匹配(
~和~*)按配置文件中出现的**顺序**依次检查,命中第一个即停止 - 因此,把更具体的正则(如
\.js$)放在更宽泛的(如\.+$)前面
避免常见坑
- 别漏掉
$:写成\.js会错误匹配/script.js?v=1中的v=1部分(因为.是正则元字符,\.才表示字面点号) - 不要混用
root和alias:对后缀匹配常用root;若用alias,需确保路径与 URI 路径逻辑一致,否则易 404 - 测试配置再重载:
nginx -t && nginx -s reload,避免因正则语法错误导致服务不可用


















