Nginx静态资源优化核心是高效磁盘读取:选NVMe SSD+noatime挂载、用alias替代root并启用open_file_cache、开启sendfile+tcp_nopush实现零拷贝、按资源类型设置缓存头并关闭无关日志。
Java 应用部署中,Nginx 不处理 Java 逻辑,但承担静态资源(如前端 HTML、CSS、JS、图片)的直接服务职责。优化其磁盘读取性能,核心不是“让 Nginx 更快地跑 Java”,而是让它更高效地从本地磁盘把文件“送出去”。关键在三件事:选对存储路径、减少系统调用、绕过用户态拷贝。
静态资源路径别放在系统盘或 /tmp 下。推荐单独挂载一块 NVMe SSD,格式化为 xfs 或 ext4,并启用 noatime:
mount -t xfs -o noatime,defaults /dev/nvme0n1p1 /data/static
www-data)对 /data/static 目录有读权限(755),文件为 644
location 匹配后拼接路径会多一次字符串操作和安全检查。alias 更轻量,尤其适合固定前缀(如 /static/):
location /static/ { alias /data/static/; }(注意末尾斜杠要一致)stat() 和 open():open_file_cache max=2000 inactive=30s;open_file_cache_valid 60s;open_file_cache_min_uses 2;open_file_cache_errors on;这是降低 CPU 占用和延迟最有效的组合,但容易被干扰:
sendfile on; + tcp_nopush on;
keepalive_timeout 60; 才能发挥最大效果gzip on 或 sub_filter,sendfile 会自动失效——静态资源建议关闭 gzip(由前端构建工具压缩好),或改用 gzip_static on; 配合预压缩 .gz 文件read_ahead 1m;,提前加载进页缓存客户端不发请求,磁盘就不用读。重点区分是否带哈希指纹:
add_header Cache-Control "public, max-age=31536000, immutable";
expires 7d; + add_header Cache-Control "public";
expires 1m; + 启用 ETag(默认开启)access_log off;,避免日志 I/O 干扰