Nginx静态资源高性能配置,提升网站加载速度


网站的访问速度,很大一部分取决于静态资源的输出效率,图片、JS、CSS、字体、静态页面这类资源占据绝大多数请求。很多站长只依赖CDN加速,却忽略Nginx源站层面的静态资源优化。源站配置差,即便接入CDN,回源阶段依旧会拖慢整体体验。

img

本文带来Nginx原生静态资源全套高性能配置,无需额外插件,直接修改nginx.conf或者站点conf文件,实现文件缓存、压缩、文件读取优化,降低服务器CPU与带宽消耗,同时对搜索引擎友好,适配个人源码站、博客、企业站点。

一、开启Gzip压缩,减小传输体积

Gzip是性价比最高的优化手段,对文本类资源进行压缩,JS、CSS、HTML、JSON体积最高可以压缩60%‑80%。图片、字体类本身已经压缩,不需要重复gzip。

nginx

gzip on;
gzip_vary on;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_types text/plain text/css
text/xml text/javascript
application/json
application/javascript;
gzip_disable "MSIE [1-6].";
 

参数说明:

  • gzip_min_length 1k:小于1k的小文件不压缩,避免压缩开销大于收益
  • gzip_comp_level 6:压缩等级,6属于平衡,等级越高越消耗CPU,不建议开到9
  • gzip_types:指定哪些类型文件开启压缩,图片不要加入列表

如果使用CDN,部分CDN会接管gzip,源站开启也不会冲突。

二、静态文件浏览器缓存设置

通过 expires 指令告诉浏览器本地缓存周期,用户再次访问不再重复请求服务器,减少请求次数。区分不同资源设置不同缓存时间,避免修改后用户看不到更新。

nginx

location ~* .(jpg|jpeg|png|gif|webp|ico|woff|woff2|ttf)$ {
expires 30d;
add_header Cache-Control "public";
}

location ~* .(css|js)$ {
expires 7d;
add_header Cache-Control "public";
}

location ~* .(php)$ {
expires -1;
add_header Cache-Control "no-store, no-cache, must-revalidate";
}
 

  • 图片字体:30天长缓存,改动图片建议修改文件名强制刷新缓存
  • css/js:7天缓存,兼顾速度和版本更新
  • php动态程序:完全禁用浏览器缓存,保证实时输出内容

三、开启高效文件读取模块open_file_cache

open_file_cache是Nginx核心性能参数,缓存文件描述符、文件元信息,减少磁盘IO,高并发站点效果尤为明显。

nginx

open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
 

  • max=1000:最多缓存1000个文件句柄
  • inactive=20s:20秒没有访问就释放缓存
  • open_file_cache_min_uses 2:访问2次以上的文件才进入缓存

适合静态文件多的站点;文件频繁修改的场景不建议调太大。

四、关闭不必要的功能,减少额外响应开销

  1. 隐藏Nginx版本号

防止攻击者利用版本漏洞扫描:

nginx

server_tokens off;
 

  1. 关闭多余ETag(可选)

如果已经使用expires缓存策略,可以关闭ETag,减少响应头开销。

nginx

etag off;
 

五、开启tcp_nopush与tcp_nodelay优化网络传输

nginx

tcp_nopush on;
tcp_nodelay on;
 

tcp_nopush把小数据包合并成完整包再发送;tcp_nodelay用于响应快速返回,二者搭配优化TCP传输,减少网络往返延迟。

六、完整站点片段参考

nginx

server {
listen 80;
server_name example.com;
root /www/wwwroot/example;

gzip on;
gzip_vary on;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_types        text/plain      text/css

text/xml text/javascript
application/json
application/javascript;
gzip_disable "MSIE [1-6].";

open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;

tcp_nopush on;
tcp_nodelay on;
server_tokens off;

location ~* \.(jpg|jpeg|png|gif|webp|ico|woff|woff2|ttf)$ {
    expires 30d;
    add_header Cache-Control "public";
}
location ~* \.(css|js)$ {
    expires 7d;
    add_header Cache-Control "public";
}
location ~* \.(php)$ {
    expires -1;
    add_header Cache-Control "no-store, no-cache, must-revalidate";
}

}
 

修改完成后校验配置是否正确:

bash

nginx -t
 

校验成功重载生效:

bash

nginx -s reload
 

七、常见踩坑提醒

1. 浏览器缓存设置太长,修改css/js图片后,访客看不到更新。解决方案:静态资源修改时带上版本号,例如 style.css?v=2 。
2. open_file_cache不要在频繁改动文件的目录使用,会读取到旧文件。
3. gzip不要对图片、mp4开启,不会变小还浪费CPU。
4. 搭配CDN时,源站expires会传递给CDN作为缓存参考,源站配置会直接影响CDN缓存行为。

总结

静态资源性能优化分为三层:源站Nginx压缩、浏览器本地缓存、CDN边缘缓存。Nginx作为源头,做好gzip、文件缓存、响应头控制,能够大幅降低服务器CPU、磁盘IO、带宽压力。

这套配置不用依赖第三方组件,直接落地,不管是裸机Nginx还是宝塔、1Panel面板都可以使用。优化完成后配合CDN,网站加载速度会有非常直观的提升。


手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

站点定期自动备份方案:本地+异地双备份防数据丢失

服务器磁盘占用持续暴涨,快速定位清理日志垃圾文件

评 论
更换验证码