内容提要
使用gzip静态加速可提高网页加载速度、减少CPU负载。配置gzip_static在Nginx中自动搜索并使用已压缩的文件,减少压缩处理次数。gzip_static可以以最大压缩率保存文件,减小文件大小。需要安装ngx_http_gzip_static_module模块,并在Nginx配置中添加gzip_static on。压缩的文件包括css、js、xml等文本文件。gzip压缩可使用gzencode或gzip命令。
延伸解读
gzip_static 如何减少 CPU 负载
文章指出,仅使用 gzip on 时,Nginx 每次请求都会执行压缩处理,传统观点认为这会带来较大的 CPU 负载。而启用 gzip_static 后,Nginx 会优先查找同名的 .gz 文件,若存在则直接返回,避免实时压缩;若不存在,则回退到常规压缩。因此,提前生成压缩文件能有效降低 CPU 负载并加快响应速度。
预压缩可启用最高压缩级别
由于压缩过程可以离线进行,gzip_static 允许以最高压缩级别(如级别 9)保存文件,而不必担心实时压缩带来的 CPU 负担。文章强调,这样能进一步减小文件体积。但需注意,压缩级别越高,生成 .gz 文件所需时间越长,适合在构建或更新阶段完成。
模块依赖与配置要点
使用 gzip_static 需要 Nginx 安装 ngx_http_gzip_static_module 模块。文章提供了检查命令,并说明若未安装可能需要重新编译 Nginx 并加入 --with-http_gzip_static_module 参数。配置时只需在 gzip 相关指令中添加 gzip_static on; 即可。若使用 gzip_static always,则需同时设置 gunzip on; 以兼容不支持 gzip 的客户端。
适用文件类型与压缩工具
文章建议压缩 css、js、xml 等文本文件,基本对应 gzip_types 指定的类型,可理解为“图像之外的其他内容”。生成 .gz 文件可使用 PHP 的 gzencode($file, 9) 或 Linux 的 gzip -9 -k 命令。对于图像是否压缩,文章提到若设为级别 9 通常也会变小,但建议自行测试比较。
Q&A
Nginx 的 gzip_static 是什么?它有什么作用?
gzip_static 是 Nginx 的一个模块功能,它允许 Nginx 自动搜索并使用预先压缩好的 .gz 文件(例如 style.css.gz)来响应请求,而不是每次动态压缩。这样可以减少 CPU 负载,加快网页加载速度。
为什么使用 gzip_static 比普通的 gzip on 更好?
普通的 gzip on 每次请求都会动态压缩文件,导致 CPU 负载较大。而 gzip_static 会直接使用预先压缩好的 .gz 文件,避免了重复压缩,从而减少 CPU 负载并提高处理速度。此外,预压缩文件可以以最高压缩级别(如级别 9)保存,进一步减小文件大小。
如何在 Nginx 中启用 gzip_static?
在 Nginx 配置文件中添加 'gzip_static on;' 即可启用。通常还需要配合其他 gzip 指令,如 gzip on; gzip_comp_level 1; gzip_min_length 1024; gzip_vary on; gzip_proxied any; gzip_types ... 等。
使用 gzip_static 需要安装什么模块?如何检查?
需要安装 ngx_http_gzip_static_module 模块。可以使用命令 'nginx -V 2>&1 | tr ' ' '\n' | egrep _module | sed -e 's/--with-//g'' 来检查是否已安装。如果未安装,需要重新编译 Nginx 并加上 --with-http_gzip_static_module 参数。
如何生成 gzip 压缩文件?
可以使用 PHP 的 gzencode 函数(如 gzencode($file, 9))或 Linux 的 gzip 命令(如 gzip -9 -k style.css)来生成 .gz 文件。建议在文件更新时自动创建。
哪些类型的文件适合使用 gzip 压缩?
一般文本文件如 CSS、JS、XML 等适合压缩,可以理解为“图像之外的其他内容”。具体由 gzip_types 指令指定。对于图像,通常不建议压缩,但若使用最高压缩级别(9),图像也可能变小,可以尝试比较。