Nginx静态资源优化实战:提升10倍性能关键!

Nginx是大型架构核心,下面我详解Nginx静态资源优化@mikechen

浏览器缓存优化

这是最基础、最有效的优化,让浏览器或CDN直接缓存静态资源,减少服务器请求。

Nginx静态资源优化实战:提升10倍性能关键!-mikechen

静态资源优化的核心目标之一,是尽可能让浏览器在本地直接读取已缓存文件,而不是每次访问都重新向服务器请求。

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自身缓存可进一步加速,尤其在反向代理或高并发场景。

Nginx静态资源优化实战:提升10倍性能关键!-mikechen

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)

静态资源在网络传输过程中,文件体积越小,加载速度通常越快。

Nginx静态资源优化实战:提升10倍性能关键!-mikechen

常见方式是开启 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%,显著提升加载速度,尤其移动端。

Nginx静态资源优化实战:提升10倍性能关键!-mikechen

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

评论交流
    说说你的看法