一篇文章读懂nginx的gzip_static模块

 更新时间:2022年05月12日 15:15:06   作者:乘风破浪2021  
gzip是针对于请求实时进行压缩,cpu开销大,gzip_static 完全可以在编译后使用压缩工具搞出来,下面这篇文章主要给大家介绍了如何通过一篇文章读懂nginx的gzip_static模块,需要的朋友可以参考下

Nginx支持静态和动态两种包体gzip压缩方式,分别对应模块ngx_http_gzip_static,ngx_http_gzip。

我们知道gzip是CPU密集型的应用,实时动态压缩比较消耗CPU资源。另外,如果使用gzip,则sendfile零拷贝技术无法使用。为进一步提高Nginx的性能,我们可以使用静态gzip压缩,提前将需要压缩的文件压缩好,当客服请求到达时,直接发送压缩好的.gz文件,如此就减轻了服务器CPU的压力,提高了性能。缺省ngx_http_gzip_static模块并未启用,需要重新编译。

#注:根据需要自行添加其它参数
./configure --with-http_gzip_static_module

准备.gz文件:所有待压缩的文件,需要保留源文件和.gz文件,在相同WEB目录。如下,以index.html为例。

#压缩保留源文件的方法:
[root@test01 html]# gzip -c index.html > index.html.gz
[root@test01 html]# ll index.*
-rw-r--r--. 1 root root 620 Jun 23  2021 index.html
-rw-r--r--. 1 root root 401 Jun 23  2021 index.html.gz

使用touch同步源文件和.gz文件的修改时间。文件修改时间对应Last-Modified响应字段,HTTP缓存中使用很广泛,同步二者时间,目的是保持缓存过期判断的一致性。

touch index.html.gz -r index.html

添加配置文件:

gzip_static on;

gzip_static优先级高于gzip,$gzip_ratio对于gzip_static不生效,如果gzip_static失效,如缺少.gz,则gzip会生效。

gzip_static生效时,和gzip不同,Content-Encoding和Cotent-Length可以同时存在,因为响应在发送前已经明确其大小。

实际执行的效果:

[root@test01 html]# curl test --compressed -I
HTTP/1.1 200 OK
Server: nginx/1.20.1
Date: Wed, 23 Feb 2022 04:14:02 GMT
Content-Type: text/html
Content-Length: 401
Last-Modified: Wed, 23 Jun 2021 06:31:52 GMT
Connection: keep-alive
ETag: "60d2d558-191"
Content-Encoding: gzip

也可以考虑用always参数

gzip_static always;

always的语义是不考虑客户端是否支持gzip解压【注:依据是客户端发送的Accept-Encoding】,Nginx都将发送.gz文件,而on则是当客户端不支持gzip解压时,则发送原始文件。

下面是gzip_static on,curl启用压缩和不启用压缩的对比,可以看到仅当curl启用压缩才发送.gz文件。

[root@test01 html]# curl test --compressed -I
HTTP/1.1 200 OK
Server: nginx/1.20.1
Date: Wed, 23 Feb 2022 07:27:43 GMT
Content-Type: text/html
Content-Length: 401
Last-Modified: Wed, 23 Jun 2021 06:31:52 GMT
Connection: keep-alive
ETag: "60d2d558-191"
Content-Encoding: gzip

[root@test01 html]# curl test  -I
HTTP/1.1 200 OK
Server: nginx/1.20.1
Date: Wed, 23 Feb 2022 07:27:49 GMT
Content-Type: text/html
Content-Length: 620
Last-Modified: Wed, 23 Jun 2021 06:31:52 GMT
Connection: keep-alive
ETag: "60d2d558-26c"
Accept-Ranges: bytes

下面是设置为gzip_static always,curl启用压缩和不启用压缩的对比,可以发现无论curl是否启用压缩,都将发送.gz文件。

[root@test01 html]# curl test -I
HTTP/1.1 200 OK
Server: nginx/1.20.1
Date: Wed, 23 Feb 2022 07:32:56 GMT
Content-Type: text/html
Content-Length: 401
Last-Modified: Wed, 23 Jun 2021 06:31:52 GMT
Connection: keep-alive
ETag: "60d2d558-191"
Content-Encoding: gzip #客户端没启用压缩,返回的内容仍然是gzip压缩的

[root@test01 html]# curl test --compressed -I
HTTP/1.1 200 OK
Server: nginx/1.20.1
Date: Wed, 23 Feb 2022 07:33:05 GMT
Content-Type: text/html
Content-Length: 401
Last-Modified: Wed, 23 Jun 2021 06:31:52 GMT
Connection: keep-alive
ETag: "60d2d558-191"
Content-Encoding: gzip

[root@test01 html]# curl test --compressed
<!DOCTYPE html>
<html lang="en">
<head>
<title>stream ssl test!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>stream ssl test!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/" rel="external nofollow"   >nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/" rel="external nofollow"   >nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

#因为没有启用压缩,所以.gz文件无法解压,将被当做二进制文件输出,有Warning提示。
[root@test01 html]# curl test 
Warning: Binary output can mess up your terminal. Use "--output -" to tell 
Warning: curl to output it to your terminal anyway, or consider "--output 
Warning: <FILE>" to save to a file.
[root@test01 html]# 

Chrome中也可以通过控制Accept-Encoding的发送,仿真是否需要响应的包体压缩,看下图:

总之,gzip_static是对gzip的补充,通过简单的设置,就能使Nginx提供更好的性能。

参考:gzip_static

相关文章:一文读懂nginx gzip

总结

到此这篇关于一篇文章读懂nginx中gzip_static模块的文章就介绍到这了,更多相关nginx gzip_static模块内容请搜索得牛网以前的文章或继续浏览下面的相关文章希望大家以后多多支持得牛网!

相关文章

  • Nginx简介_动力节点Java学院整理

    Nginx简介_动力节点Java学院整理

    Nginx是一个跨平台的Web服务器,可运行在Linux、FreeBSD、Solaris、AIX、Mac OS、Windows等操作系统上,并且它还可以使用当前操作系统特有的一些高效API来提高自己的性能
    2017-08-08
  • Nginx访问日志及错误日志参数说明

    Nginx访问日志及错误日志参数说明

    这篇文章主要介绍了Nginx访问日志及错误日志参数说明,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • nginx+tomcat实现Windows系统下的负载均衡搭建教程

    nginx+tomcat实现Windows系统下的负载均衡搭建教程

    下面小编就为大家分享一篇nginx+tomcat实现Windows系统下的负载均衡搭建教程,具有很好的参考价值,希望对大家有所帮助
    2017-12-12
  • CentOS 6.3安装配置Nginx方法

    CentOS 6.3安装配置Nginx方法

    这篇文章主要介绍了CentOS 6.3安装配置Nginx方法,需要的朋友可以参考下
    2014-11-11
  • Nginx服务器Nginx.com配置文件详解

    Nginx服务器Nginx.com配置文件详解

    这篇文章主要介绍了Nginx服务器Nginx.com配置文件详解的相关资料,本文介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • Nginx中FastCGI如何配置优化

    Nginx中FastCGI如何配置优化

    这篇文章主要介绍了Nginx中FastCGI如何配置优化,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Nginx+CI框架出现404错误怎么解决

    Nginx+CI框架出现404错误怎么解决

    这篇文章主要介绍了Nginx+CI出现404错误怎么解决的相关资料,需要的朋友可以参考下
    2016-03-03
  • nginx设置上传目录无执行权限的方法

    nginx设置上传目录无执行权限的方法

    在windows+iis下,可以设置上传目录,类似:upload,uploadfile,attachments,这样的目录下面无脚本执行权限,从而防止非法用户上传脚本得到webshell
    2010-11-11
  • 使用goaccess分析nginx日志的详细方法

    使用goaccess分析nginx日志的详细方法

    goaccess 工具提供快速、多样的HTTP状态统计,可以令管理员不再纠结于统计各类数据,和繁杂的指令以及一大堆管道/正则表达式说再见,今天通过本文给大家介绍goaccess 分析nginx 日志的方法,需要的朋友一起看看吧
    2021-07-07
  • nginx中共享内存的使用详解

    nginx中共享内存的使用详解

    这篇文章主要介绍了nginx中共享内存的使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06

最新评论