「日志记录」深入理解宝塔Nginx配置中的br和gzip处理方式插图

前言

最近深入研究了宝塔面板中Nginx配置中的brgzip处理方式,对于这两种压缩处理的推荐逻辑有了更深刻的理解。在这篇博客中,我将分享我的配置经验,以及解决其中一些问题的简便方法。

全局Nginx配置

首先,让我们看一下全局Nginx配置,这是一套与宝塔官方相近的设置。然而,这样的配置存在一个小问题,当本地既没有br文件又没有gz文件时,并不会直接返回源文件,而是触发了br的动态压缩处理。为了解决这个问题,我提供了一种简单而直接的方法,将对文件的处理全部注释掉。具体如下:

gzip on;
gzip_static on;
gzip_min_length  1k;
gzip_buffers     4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
gzip_vary on;
gzip_proxied   expired no-cache no-store private auth;
gzip_disable   "MSIE [1-6]\.";

# brotli
brotli on;
brotli_static on;   
brotli_comp_level 1;
brotli_buffers 16 8k;
brotli_min_length 20;
brotli_types text/xml text/plain text/css application/javascript application/x-javascript application/rss+xml text/javascript image/tiff image/svg+xml application/json application/xml;

网站Nginx配置

接着,在网站的Nginx配置中,我们需要添加以下内容:

location ~* \.(js|css)$ {
    root /path/to/files;
    try_files $uri.br $uri.gz $uri =404;
}

这样配置后,当用户访问js和css资源时,会依次尝试br、gz,如果都没有则返回源文件。

测试

在测试过程中,我们发现浏览器中实际返回的资源大小和本地文件大小存在细微差异。这是由于Windows以1024字节(二进制)计算文件大小,而浏览器以1000字节(十进制)计算,导致了浏览器显示的文件大小稍微大一些。通过一个645kb的br文件的例子,我们可以进行如下换算:

总字节数:661389

浏览器展示大小:661389 / 1000 = 661.389 ≈ 662kb

可以看到,浏览器确实是以十进制计算,并且采用的是向上取整的方式。除了查看字节数确认配置是否生效外,我们还可以通过查看文件头信息中的Last-Modified字段来验证配置的修改时间。需要注意的是,头信息的Last-Modified字段时间是UTC时间,可以通过JavaScript的Date对象将其转换为本地时间进行比对。