Nginx中需在location块内用正则精准匹配静态资源后缀(如.js|css|woff2|ttf|png),添加带always的CORS头,显式处理OPTIONS预检请求并返回204,禁用*与Credentials混用,且避免全局配置污染。

精准匹配静态资源类型并启用跨域头
字体、JS、CSS、图片等静态资源需单独配置 location 块,避免在 server 或 http 全局层级加 CORS 头,防止误伤非目标路径。推荐用正则精确匹配后缀:
location ~* \.(js|css|png|jpg|gif|woff2|woff|ttf|eot|svg|otf)$ { }- 里面必须使用
add_header ... always,否则 304 等非 2xx 响应会丢失 CORS 头 -
Access-Control-Allow-Origin写具体域名(如https://your-app.com),若前端不传 Cookie,才可用* - 搭配
Access-Control-Allow-Methods "GET, OPTIONS"和Access-Control-Allow-Headers(含Range、Content-Type等)
必须显式处理 OPTIONS 预检请求
浏览器加载字体或带自定义 header 的 JS/CSS 时,会先发 OPTIONS 请求。Nginx 默认不响应,导致跨域失败。
- 在同一个 location 块内添加:
if ($request_method = 'OPTIONS') { ... return 204; } - return 前重复写关键头:Origin、Methods、Headers、Max-Age,并同样加
always - 务必加
add_header 'Content-Length' 0;,否则部分客户端解析异常 - 字体文件(尤其 woff2/ttf)即使本地
file://加载也会触发预检,不可跳过
开启压缩并适配字体 MIME 类型
默认 gzip 不压缩字体,需手动扩展 MIME 类型支持,同时确保压缩不破坏字体解析。
- 启用 gzip:
gzip on;,并设合理阈值(如gzip_min_length 1024;)避免小图标字体越压越大 - 补充字体类型:
gzip_types application/font-woff2 font/woff font/ttf font/otf image/svg+xml text/css application/javascript; - Nginx ≥ 1.13.5 支持
font/woff2;旧版本建议用application/font-woff2 - 可配合
gzip_static on;提前生成 .gz 文件,兼顾性能与兼容性
配置缓存策略并暴露必要响应头
静态资源既要支持强缓存,又要满足断点续传等高级需求,需协同设置 Cache-Control 与 CORS 暴露头。
- 添加缓存控制:
expires 1y;或add_header Cache-Control "public, immutable, max-age=31536000"; - 对字体启用范围请求支持,需暴露长度与区间信息:
add_header Access-Control-Expose-Headers "Content-Length, Content-Range"; - 搭配
ETag on;和if_modified_since exact;,提升协商缓存效率 - 验证方式:用
curl -I https://site.com/static/icon.woff2查看是否同时返回Access-Control-Allow-Origin和Content-Encoding: gzip


















