前几天对项目进行了webpack打包优化,开启了webpack的gzip功能,打包出来的.gz需要nginx开启gzip功能才能使用,要不然加载资源会报404;新增nginx配置如下:

#开启和关闭gzip模式
gzip on;

#gizp压缩起点,文件大于1k才进行压缩
gzip_min_length 1024k;

#gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间
gzip_comp_level 4;

#进行压缩的文件类型。
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;

#nginx对于静态文件的处理模块,开启后会寻找以.gz结尾的文件,直接返回,不会占用cpu进行压缩,如果找不到则不进行压缩
gzip_static on;

#是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;

#设置压缩所需要的缓冲区大小,以4k为单位,如果文件为7k则申请2*4k的缓冲区 
gzip_buffers 4 16k;

#设置gzip压缩针对的HTTP协议版本
gzip_http_version 1.1;

执行 nginx -t 命令,检查nginx配置文件是否正确,报错信息如下:
错误信息:

[root@localhost sbin]# ./nginx -c /usr/local/nginx/conf/nginx.conf
nginx: [emerg] unknown directive “gzip_static” in /usr/local/nginx/conf/nginx.conf:46

原因是nginx缺少gzip_static模块,如何给现有nginx添加模块呢?大概的过程就是:
1、找到现有nginx安装目录,添加gzip_static模块,重新编译安装包。
2、替换系统nginx命令。
具体步骤如下:
1、进入nginx安装目录同级目录,执行./nginx -V 查看当前Nginx已编译的模块,看到的可能是如下内容:

$ ./nginx -V
nginx version: nginx/1.19.6
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/opt/nginx/ --user=www --group=www --prefix=/opt/nginx/ --with-http_ssl_module --with-http_stub_status_module

2、很简单,把原来的arguments拷贝过来,增加–with-http_gzip_static_module即可,执行命令如下:

./configure --prefix=/opt/nginx/ --user=www --group=www --prefix=/opt/nginx/ --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module

3、执行make,千万不要 make&install,如果直接执行install会直接替换,make命令执行完成之后在编译目录objs文件下面有个nginx执行文件,此时我们把原来的sbin目录下nginx执行文件备份一下,将新编译的nginx二进制文件拷贝到原执行文件的位置

mv nginx nginx.xxxxxx
cp ../nginx-1.19.6/objs/nginx .

我们看一下新的编译文件模块信息,已经包含了新的模块

./nginx -V
nginx version: nginx/1.19.6
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/opt/nginx/ --user=www --group=www --prefix=/opt/nginx/ --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module

执行 nginx -s reload 重启nginx即可

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐