玖叶教程网

前端编程开发入门

Nginx的Gzip和sendfile的共存问题和gzip_static使用测试

sendfile()经过压缩之后,存在着一个问题是使用sendfile之后无法进入应用程序缓冲区,而压缩需要由内核缓冲区进入到应用程序缓冲区

解决问题的方法是,在内核缓冲区就进行压缩,将原先的jquery.js文件压缩成jquery.js.gz

前面在讲解sendfile的时候,提到过,开启sendfile以后,在读取磁盘上 的静态资源文件的时候,可以减少拷贝的次数,可以不经过用户进程将 静态文件通过网络设备发送出去,但是Gzip要想对资源压缩,是需要经 过用户进程进行操作的。所以如何解决两个设置的共存问题。

可以使用ngx_http_gzip_static_module模块的gzip_static指令来解决。

gzip_static指令

gzip_static: 检查与访问资源同名的.gz文件时,response中以gzip相关 的header返回.gz文件的内容。

语法:gzip_static on | off | always;

它的默认值是 gzip_static off;

位置存储在:http、server、location三个模块当中

怎样用,使用vim nginx_gzip.conf打开配置文件

如果你想手动配置压缩指令,先要将gzip的文件进行关闭

使用gzip_static on;将文件进行打开

配置完gzip_static之后,出现一个命令,不认识unknown,出现这个问题的原因是什么?它缺少一个模块配置

如何安装ngx_http_gzip_static_module模块

第一步:nginx -v

第二步:将nginx安装目录下sbin目录中的nginx二进制文件进行更名

 cd /usr/local/nginx/sbin
 mv nginx nginxold

第三步:进入Nginx的安装目录

cd /root/nginx/core/nginx-1.16.1

第四步:使用make clean将之前编译的文件给他清除掉

第五步:使用--with-http_gzip_static_module,其中--with-的意思就是添加模块的意思

之后就会生成一个Ngnix的二进制可执行文件

输入ll之后,发现这里生成了一个objs的二进制文件

cd 进入之后有一个nginx的可执行文件

cp的意思是,将nginx拷贝到 /usr/local/nginx/sbin文件下,最后项目升级一定要在Ngnix安装目录下升级

先通过cd 往上跳一层

最后执行make upgrade进行升级

检验语法,重新加载 nginx -s reload

步骤小结:

1、查询当前Nginx的配置参数

nginx -V

2、将nginx安装目录下sbin目录中的nginx二进制文件进行更名

 cd /usr/local/nginx/sbin
 mv nginx nginxold

3、 进入Nginx的安装目录

 cd /root/nginx/core/nginx-1.16.1

4、执行make clean清空之前编译的内容

 make clean

5、使用configure来配置参数

./configure --with-http_gzip_static_module

6、使用make命令进行编译

make

7、将objs目录下的nginx二进制执行文件移动到nginx安装目录下的sbin 目录中

 mv objs/nginx /usr/local/nginx/sbin

8、执行更新命令

make upgrade

gzip_static测试使用

首先切换到 cd /usr/local/nginx/html/页面下查看是否有jquery.js文件是否存在

直接访问/jquery.js发现文件的数据格式是281kb,文件数据格式没有进行压缩

在Network中没有压缩的请求头数据格式

直接使用gzip jquery.js可以将jquery.js.gz文件进行压缩

再对jQuery.js文件进行访问,此时jQuery的数据大小已经变成了83.4kb了,数据已经被压缩了

使用NetWork查看请求头的相关信息,此时经过压缩文件后访问的jQuery.js文件,多了一个Contets-Encoding:gzip和Var:Accept-Encoding,表示该文件经过了压缩

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言