在 Nginx 中配置静态资源的响应头,可以通过 add_header 指令和 expires 等模块实现。以下是常见场景的配置示例和说明:
1. 基础响应头设置
server {
listen 80;
server_name example.com;
location /static/ {
# 静态资源路径
alias /path/to/static/files/;
# 通用安全与缓存头
add_header Cache-Control "public, max-age=86400"; # 缓存1天
add_header X-Content-Type-Options "nosniff"; # 禁止MIME嗅探
add_header X-Frame-Options "SAMEORIGIN"; # 防iframe嵌套劫持
add_header Content-Security-Policy "default-src 'self'"; # CSP策略
# 自定义头部(可选)
add_header My-Custom-Header "value";
}
}
2. 针对不同文件类型设置不同头部
location ~* \.(jpg|png|gif|ico|css|js)$ {
root /path/to/static;
# 图片类资源缓存30天
if ($request_filename ~* \.(jpg|png|gif|ico)$) {
expires 30d;
add_header Cache-Control "public, immutable";
}
# CSS/JS类资源缓存7天并启用压缩
if ($request_filename ~* \.(css|js)$) {
expires 7d;
add_header Cache-Control "public";
gzip_static on; # 需预先生成.gz文件
}
}
3. CORS跨域支持
location /assets/ {
alias /path/to/assets/;
# CORS配置(允许所有域名访问)
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent';
# OPTIONS预检请求处理
if ($request_method = 'OPTIONS') {
return 204;
}
}
4. MIME类型强制修正
若静态资源的扩展名与实际类型不符,可强制指定:
location /downloads/ {
types { } # 清空默认MIME映射
default_type application/octet-stream; # 强制为二进制流
}
关键指令说明
| 指令 | 作用 |
|---|---|
add_header |
添加任意自定义响应头(重复指令会覆盖前值,需注意作用域)。 |
expires |
设置资源的过期时间(需加载 ngx_http_headers_module)。 |
gzip_static |
优先发送预压缩的 .gz 文件(需配合 gzip 模块)。 |
types {} |
重置或自定义 MIME 类型映射。 |
调试建议
- 检查生效情况
curl -I http://example.com/static/file.js - Nginx重载配置
nginx -t && nginx -s reload
根据实际需求调整缓存策略、安全头或跨域规则即可。
内容由零声教学AI助手提供,问题来源于学员提问




