Nginx是大型架构核心,下面我详解Nginx静态资源优化@mikechen
浏览器缓存优化
这是最基础、最有效的优化,让浏览器或CDN直接缓存静态资源,减少服务器请求。

静态资源优化的核心目标之一,是尽可能让浏览器在本地直接读取已缓存文件,而不是每次访问都重新向服务器请求。
Nginx 可以通过设置响应头中的 Expires 和 Cache-Control 来控制浏览器缓存行为。
# 针对不同资源设置不同缓存策略
location ~* \\\\.(jpg|jpeg|png|gif|ico|svg|webp)$ {
expires 1y; # 图片缓存1年
add_header Cache-Control "public, immutable";
access_log off; # 可选,减少日志开销
}
location ~* \\\\.(css|js|woff|woff2)$ {
expires 30d; # CSS/JS缓存30天
add_header Cache-Control "public";
}
效果:首次加载后,后续访问直接从浏览器缓存读取,加载速度提升数倍。
Nginx服务器端缓存优化
浏览器缓存之外,Nginx自身缓存可进一步加速,尤其在反向代理或高并发场景。

proxy_cache(磁盘/内存缓存):
http { # 定义缓存路径和共享内存区 proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:50m max_size=10g inactive=60m use_temp_path=off; # 缓存键(可根据需求调整) proxy_cache_key $host$uri$is_args$args; } server { location /static/ { proxy_cache my_cache; proxy_cache_valid 200 302 1y; # 成功响应缓存1年 proxy_cache_valid 404 1m; # 404短缓存 proxy_cache_use_stale error timeout updating http_500; # 后端故障时返回旧缓存 add_header X-Cache-Status $upstream_cache_status; # 调试用:HIT/MISS } }
压缩与传输优化(Gzip + sendfile)
静态资源在网络传输过程中,文件体积越小,加载速度通常越快。

常见方式是开启 gzip 压缩,使服务器在返回资源前先进行压缩,再由浏览器解压使用。
减少传输数据量 + 零拷贝传输。
http {
gzip on;
gzip_vary on;
gzip_min_length 1k; # 小于1k不压缩
gzip_comp_level 6; # 压缩级别(1-9,平衡CPU与压缩率)
gzip_types text/plain text/css application/javascript application/json image/svg+xml;
gzip_disable "msie6";
}
零拷贝传输传输优化:
效果:静态资源体积可减少60-80%,显著提升加载速度,尤其移动端。

http {
sendfile on; # 启用零拷贝
tcp_nopush on; # 结合sendfile,提升网络包效率
tcp_nodelay on; # 降低延迟
aio on; # 大文件异步IO(需内核支持)
}