• 入门系列之在Nginx配置Gzip


    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~

    本文由小铁匠米兰的v 发表于云+社区专栏

    简介

    网站加载的速度取决于浏览器必须下载的所有文件的大小。减少要传输的文件的大小可以使网站不仅加载更快,而且对于那些宽带是按量计费的人来说也更友好。

    gzip是一种流行的数据压缩程序。您可以使用gzip压缩Nginx实时文件。这些文件在检索时由支持它的浏览器解压缩,好处是web服务器和浏览器之间传输的数据量更小,速度更快。

    gzip不一定适用于所有文件的压缩。例如,文本文件压缩得非常好,通常会缩小两倍以上。另一方面,诸如JPEG或PNG文件之类的图像已经按其性质进行压缩,使用gzip压缩很难有好的压缩效果或者甚至没有效果。压缩文件会占用服务器资源,因此最好只压缩那些压缩效果好的文件。

    在本指南中,我们将讨论如何配置安装在Ubuntu 16.04服务器上的Nginx,以利用gzip压缩,来减少发送给网站访问者的文件的大小。

    必备条件

    要学习本教程,您需要:

    第一步、创建测试文件

    这一步中,我们将在默认的Nginx目录中创建几个测试文件来进行测试gzip的压缩效果。

    Nginx不会分析文件内容,他只分析文件后缀,所以,它只是查找文件扩展名以确定其MIME类型,这样nginx就会对不同的文件作出不同的压缩处理。

    因为只是测试,所以测试文件的内容无关紧要。通过适当的更改文件名,我们可以欺骗Nginx,让Nginx认为这个文件是图像或者是js脚本。

    在我们的配置中,Nginx不会压缩非常小的文件,因此我们将创建大小恰好为1KB的测试文件。这将让我们验证Nginx是否使用压缩,压缩一种类型的文件而不是其他类型的文件。

    使用创建truncate在默认Nginx目录中命名的1 KB文件test.html。扩展名表示它是一个HTML页面。

    sudo truncate -s 1k /var/www/html/test.html
    

    让我们以相同的方式创建一些测试文件:一个jpg图像文件,一个css样式表和一个jsJavaScript文件。

    sudo truncate -s 1k /var/www/html/test.jpg
    sudo truncate -s 1k /var/www/html/test.css
    sudo truncate -s 1k /var/www/html/test.js
    

    下一步是检查NGIX如何对刚刚创建的文件进行压缩。

    第二步、检查默认行为

    让我们检查名为test.html的HTML文件是否被压缩。该命令从我们的Nginx服务器请求一个文件,并指定使用HTTP头(Accept-Encoding: gzip)来查找gzip压缩的内容。

    curl -H "Accept-Encoding: gzip" -I http://localhost/test.html
    

    作为响应,您应该看到几个HTTP响应标头:

    Nginx响应头

    HTTP/1.1 200 OK
    Server: nginx/1.4.6 (Ubuntu)
    Date: Tue, 19 Jan 2016 20:04:12 GMT
    Content-Type: text/html
    Last-Modified: Tue, 04 Mar 2014 11:46:45 GMT
    Connection: keep-alive
    Content-Encoding: gzip
    

    在最后一行中,您可以看到Content-Encoding: gzip。这告诉我们gzip压缩已用于发送此文件。这是因为在Ubuntu 16.04上,Nginx的 gzip在安装后使用默认设置自动启用了压缩。

    但是,默认情况下,Nginx仅压缩HTML文件。新安装中的每个其他文件都将以未压缩的形式提供。要验证这一点,您可以请求以test.jpg相同方式命名的测试图像。

    curl -H "Accept-Encoding: gzip" -I http://localhost/test.jpg
    

    结果应该与以前略有不同:

    Nginx响应头

    HTTP/1.1 200 OK
    Server: nginx/1.4.6 (Ubuntu)
    Date: Tue, 19 Jan 2016 20:10:34 GMT
    Content-Type: image/jpeg
    Content-Length: 0
    Last-Modified: Tue, 19 Jan 2016 20:06:22 GMT
    Connection: keep-alive
    ETag: "569e973e-0"
    Accept-Ranges: bytes
    

    Content-Encoding: gzip没有输出,这意味着文件是在没有压缩的情况下提供。

    您可以使用测试CSS样式表重复测试。

    curl -H "Accept-Encoding: gzip" -I http://localhost/test.css
    

    再一次,输出中没有提到压缩。

    CSS文件的Nginx响应头

    HTTP/1.1 200 OK
    Server: nginx/1.4.6 (Ubuntu)
    Date: Tue, 19 Jan 2016 20:20:33 GMT
    Content-Type: text/css
    Content-Length: 0
    Last-Modified: Tue, 19 Jan 2016 20:20:33 GMT
    Connection: keep-alive
    ETag: "569e9a91-0"
    Accept-Ranges: bytes
    

    下一步是将Nginx配置支持其他类型文件的压缩。

    第三步、配置Nginx的gzip设置

    要更改Nginx的 gzip配置,请使用nano或者其他您喜欢的编辑器,来打开的Nginx主要配置文件。

    sudo nano /etc/nginx/nginx.conf
    

    找到gzip设置部分,如下所示:

    . . .
    ##
    # `gzip` Settings
    #
    #
    gzip on;
    gzip_disable "msie6";
    
    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    . . .
    

    您可以看到默认情况下,指令gzip启用了压缩gzip on,但使用#注释符号注释了几个其他设置。我们将对此部分进行一些更改:

    • 通过取消注释所有注释行来启用其他设置(就是删除#
    • 添加gzip_min_length 256;指令,告诉Nginx不要压缩小于256字节的文件。这是非常小的文件,可以不用压缩
    • gzip_types是表示压缩的文件类型,还可以添加web字体格式、ioc图标和SVG图像等其他类型文件。

    应用这些更改后,设置部分应如下所示:

    /etc/nginx/nginx.conf

    . . .
    ##
    # `gzip` Settings
    #
    #
    gzip on;
    gzip_disable "msie6";
    
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_min_length 256;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;
    . . .
    

    保存并关闭文件以退出。

    要启用新配置,请重新加载Nginx。

    sudo systemctl reload nginx
    

    下一步是检查配置的更改是否按预期工作。

    第四步、验证新配置

    我们可以像在第2步中那样测试它,方法是使用curl每个测试文件并检查Content-Encoding: gzip是否有输出。

    curl -H "Accept-Encoding: gzip" -I http://localhost/test.html
    curl -H "Accept-Encoding: gzip" -I http://localhost/test.jpg
    curl -H "Accept-Encoding: gzip" -I http://localhost/test.css
    curl -H "Accept-Encoding: gzip" -I http://localhost/test.js
    

    现在,只有test.jpg图像文件才能保持未压缩状态。在所有其他示例中,您应该能够Content-Encoding: gzip在输出中找到标头。

    如果是这种情况,您已gzip成功在Nginx中配置了压缩!

    结论

    更改Nginx配置来使用gzip压缩,是很容易的一件事,而且能带来不错的提,。不仅带宽有限的访问者会更快地收到该网站,而且Google也会对网站加载速度感到满意。作为现代网络和使用的重要组成部分,网站的加载速度越来越受到关注,这gzip是改进它的一大步。


    参考文献:《How To Add the gzip Module to Nginx on Ubuntu 16.04》

    问答

    nginx多域名转发?

    相关阅读

    如何在CVM上设置SSH仅作文件传输

    如何备份你的MySQL数据库

    MySQL 8.0 版本功能变更介绍

    此文已由作者授权腾讯云+社区发布,原文链接:https://cloud.tencent.com/developer/article/1158755?fromSource=waitui

    欢迎大家前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~

    海量技术实践经验,尽在云加社区

  • 相关阅读:
    语法树,短语,直接短语,句柄2.0
    语法树,短语,直接短语,句柄
    2.理解文法和语文
    编译原理的学习 No.1
    第一次个人编程作业
    Arduboy基本操作(二)
    Arduboy基本用法(一)
    物理存储管理实训题
    创建和管理用户作业
    PL/SQL语言基础
  • 原文地址:https://www.cnblogs.com/qcloud1001/p/9341682.html
Copyright © 2020-2023  润新知