可通过Nginx的location块配合add_header指令,按路径前缀或文件类型精准设置静态资源响应头,支持缓存策略、安全头及CORS配置,需注意匹配优先级、作用域覆盖和路径一致性。

可以利用 Nginx 的 location 块配合 add_header 指令,为不同路径的静态资源设置各自独立的响应头。关键在于精准匹配路径,并在对应 location 中定义 header,避免继承或覆盖问题。
按 URL 路径前缀区分响应头
适用于有明确目录结构的资源,比如 /css/、/js/、/images/ 等。
- 每个
location /xxx/块只影响以该路径开头的请求,互不干扰 - 在对应块内使用
add_header设置专属响应头,如缓存策略或安全头 - 注意:
add_header不会自动继承父级块的 header,未显式声明即不生效
示例配置:
location /css/ {
alias /var/www/static/css/;
add_header Cache-Control "public, max-age=31536000, immutable";
add_header X-Content-Type-Options "nosniff";
}
<p>location /js/ {
alias /var/www/static/js/;
add_header Cache-Control "public, max-age=31536000, immutable";
add_header X-Content-Type-Options "nosniff";
add_header Content-Security-Policy "script-src 'self'";
}</p><p>location /admin/ {
alias /var/www/static/admin/;
add_header Cache-Control "no-store, no-cache";
add_header X-Frame-Options "DENY";
}按文件类型匹配并设置响应头
适合统一管理同类资源(如所有图片、字体),不管它们放在哪个路径下。
- 用正则 location 匹配扩展名,例如
location ~* \.(png|jpg|gif|webp)$ - 可结合
root或alias定位真实文件,再添加响应头 - 注意正则匹配优先级高于普通前缀匹配,建议放在配置靠后位置
示例:
location ~* \.(png|jpg|jpeg|gif|webp|ico)$ {
root /var/www/static;
add_header Cache-Control "public, max-age=2592000";
add_header Vary "Accept-Encoding";
}
<p>location ~<em> .(woff2|woff|ttf|eot)$ {
root /var/www/static;
add_header Cache-Control "public, max-age=31536000";
add_header Access-Control-Allow-Origin "</em>";
}为跨域静态资源单独加 CORS 头
当静态资源需被其他域名页面引用(如 CDN 图片、字体、API 返回的资源链接),必须显式启用 CORS。
- 推荐在具体资源路径(如
/static/或/api/assets/)中配置 - 使用
$http_origin动态设置Access-Control-Allow-Origin更安全 - 加上预检请求(OPTIONS)处理,避免浏览器拦截
示例:
location /static/ {
root /var/www;
add_header Access-Control-Allow-Origin "$http_origin" always;
add_header Access-Control-Allow-Methods "GET, HEAD, OPTIONS" always;
add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept" always;
add_header Access-Control-Allow-Credentials "true" always;
<pre class="brush:php;toolbar:false;">if ($request_method = 'OPTIONS') {
add_header Access-Control-Max-Age 1728000;
add_header Content-Type 'text/plain; charset=utf-8';
add_header Content-Length 0;
return 204;
}}
注意事项与常见陷阱
实际配置中容易忽略但影响显著的点:
-
add_header在同一作用域内重复写会覆盖前值,不能写多条Cache-Control,应合并为一条 - 使用
alias时,路径末尾斜杠必须一致;alias /path/对应location /abc/,否则 404 - 开发环境建议禁用缓存:
add_header Cache-Control "no-cache, must-revalidate" - 敏感资源(如用户上传的私有文件)避免设
public缓存,改用private或no-store - 若需强制刷新缓存,更新文件时应改名或加版本号(如
app.js?v=2.1.0)


















