生产级静态资源配置方案包含路径精准映射(alias)、文件元数据缓存(open_file_cache)、不可变资源强缓存(expires 1y + immutable)、零拷贝传输(sendfile)、防盗链(valid_referers)及安全响应头,环环相扣。

直接上一套兼顾安全性、性能与可维护性的生产级静态资源配置,不是零散技巧拼凑,而是环环相扣的标准化方案。
静态资源路径与文件服务优化
用 alias 替代 root 处理明确前缀路径,避免路径拼接歧义;对高频访问目录启用文件元数据缓存,减少磁盘 stat 开销:
- location /static/ { alias /opt/static/; } —— 精准映射,不依赖 URL 路径层级
- open_file_cache max=2000 inactive=30s; —— 缓存文件句柄和元信息,降低系统调用频率
- open_file_cache_valid 60s; —— 每分钟验证一次缓存有效性
- open_file_cache_min_uses 2; —— 至少被访问 2 次才进入缓存,防冷数据污染
浏览器强缓存与不可变资源策略
区分可变与不可变资源,用版本号或哈希值控制更新,避免缓存失效风险:
- location ~* \.(js|css|webp|avif|woff2)$ {
- expires 1y; —— 长期缓存(31536000 秒)
- add_header Cache-Control "public, immutable"; —— 明确告知浏览器该资源不会变更,无需校验
- access_log off; —— 关闭日志,减少 IO 压力
- }
- 配套前端构建时生成带哈希的文件名(如
main.a1b2c3.js),确保内容变更即 URL 变更
传输层与内核级性能增强
绕过用户态拷贝、提升网络栈效率,尤其对图片、字体等中大文件效果显著:
- sendfile on; —— 启用零拷贝,由内核直接从磁盘送入 socket
- tcp_nopush on; —— 配合 sendfile,等待缓冲区满再发包,减少小包数量
- tcp_nodelay on; —— 对小响应(如 HTML)禁用 Nagle 算法,降低首字节延迟
- read_ahead 1m; —— 对大文件预读,减少磁盘寻道次数
防盗链与边缘友好型响应头
防止资源被恶意盗用,同时兼容 CDN 和现代浏览器特性:
- valid_referers none blocked *.yourdomain.com; —— 允许空 referer(直接输入 URL)、自家域名,拒绝其他来源
- if ($invalid_referer) { return 403; }
- add_header X-Content-Type-Options "nosniff"; —— 阻止 MIME 类型嗅探
- add_header X-Frame-Options "DENY"; —— 防止点击劫持
- add_header Referrer-Policy "no-referrer-when-downgrade";
这套配置已在多个日均千万 PV 的生产环境稳定运行,核心逻辑是:路径精准化 → 缓存语义化 → 传输零拷贝化 → 安全默认化。不复杂但容易忽略。











