Nginx静态资源传输优化,文件高效传输,事半功倍

这篇具有很好参考价值的文章主要介绍了Nginx静态资源传输优化,文件高效传输,事半功倍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.引出问题

Nginx可以作为静态资源服务器,比如我们访问192.168.110.97:80,熟悉的nginx欢迎界面,这其实也是nginx为我们提供的一个静态文件:index.html

Nginx静态资源传输优化,文件高效传输,事半功倍

既然是静态资源,那我们能否优化一下传输效率呢?

1)sendfile文件高效传输模式。如何开启?它的原理到底是什么呢?

2)数据量大,传输效率低,如何进行优化?

2.sendfile高效传输

nginx.conf中配置sendfile on;指令就可以开启文件高效传输模式,那么它的原理是什么呢?

话不多说,走起。

sendfile的实现原理是通过调用内核提供的sendfile()调用来实现的。调用过程中,内核会将源文件的数据直接传输到socket中,而不需要将数据先拷贝到用户空间再进行传输。这样就可以避免数据在用户空间和内核空间之间的多次拷贝,从而提高了文件传输的效率。

既然是这样,那么普通传输模式和高效传输模式之间的区别就越发清晰了。

1)普通传输模式

发起文件读取命令–》读取文件到内核空间–》拷贝文件到用户空间–》拷贝文件到socket内核空间–》传输给socket

Nginx静态资源传输优化,文件高效传输,事半功倍

2)高效传输模式

发起文件读取命令–》读取文件到内核空间–》拷贝文件到socket内核空间–》传输给socket

Nginx静态资源传输优化,文件高效传输,事半功倍

3)小结

1)普通传输模式涉及到多次内核态与用户态之间的切换,这很消耗系统资源。

2)sendfile高效传输模式,直接在内核态进行数据传输,不涉及内核态与用户态之间的切换,传输效率大大提升。

3.gzip文件压缩

前面我们提到过,开启sendfile文件高效传输模式,可以提升传输的效率。其实,只做到这一步还是不够的,一旦文件的数据量较大,传输的速度又会大打折扣。

比如一部电影的大小是2G,下载时间很长,严重影响我们的观影体验,如果能够压缩到1G,那传输的时间就会减半。

Nginx为我们提供了gzip相关的模块,帮助实现对文件的压缩。

3.1 ngx_http_gzip_moudle

据nginx官方文档介绍,通过ngx_http_gzip_moudle提供的压缩功能,有助于将数据的大小减少一半甚至更多。👍

nginx已默认为我们安装该模块。接下来我们配置其指令。

1)配置是否开启gzip

作用域:http, server, location, if in location

语法:gzip on | off;

默认值gzip off;

2)配置gzip可压缩的响应类型

作用域:http, server, location

语法:gzip_types mime-type …;

默认值gzip_types text/html;

可以看到,我们可以配置多个mime-type,并且可以使用*匹配所有的mime-type。

🔔Tips:通常不会使用*进行匹配,如果所有的类型都开启压缩,如果本身静态资源的可压缩性不高,就会造成系统资源的浪费。

到这里,我们可以来体验一下开启gzip之后的压缩效果。

1)准备静态文件/usr/local/nginx/html/jquery.js

下载地址:https://code.jquery.com/jquery-3.6.4.js

2)增加location块

location /jquery {
	root   html;
}

访问http://192.168.110.98/jquery.js,查看文件大小:304kb

Nginx静态资源传输优化,文件高效传输,事半功倍

3)开启gzip

为了保持配置文件清爽,我们只对gzip压缩相关指令进行注释说明。

worker_processes  1;
gzip on;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        # 测试gzip压缩效果
        location /jquery {
        	# 配置可压缩的响应类型
        	gzip_types text/javascript;
            root   html;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

访问http://192.168.110.98/jquery.js,查看文件大小:107kb

Nginx静态资源传输优化,文件高效传输,事半功倍

3)配置gzip压缩级别

作用域:http, server, location

语法:gzip_comp_level level;

默认值gzip_comp_level 1;

🔔Tips:gzip默认压缩级别为1,可设置的值为1-9,值越高压缩程度越高,但是不一定值越高效果就越好,我们还是需要根据文件的可压缩性设置合适的压缩级别,否则也会造成系统资源的浪费。

4)配置根据User-Agent禁用gzip

作用域:http, server, location

语法:gzip_disable regex …;

作用:如果请求的User-Agent头信息与正则表达式匹配,则禁用gzip压缩功能

🔔Tips:User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 YaBrowser/23.3.4.594 Yowser/2.5 Safari/537.36,可以根据需要配置正则表达式。

5)配置gzip可压缩响应的最小长度

作用域:http, server, location

语法:gzip_min_length length;

默认值gzip_min_length 20;

🔔Tips:默认单位为byte,长度是由Content-Length响应头决定,如果长度低于设置的值,就关闭gzip压缩。建议设置为1kb以上。

6)gzip与sendfile的冲突问题

我们知道,开启sendfile文件高效传输模式,文件在内核空间直接传输给socket,不会经过用户程序,开启gzip之后,该模式也就失效了。那么怎么解决这个问题呢?

3.2 ngx_http_gzip_static_module

前面提到的gzip与sendfile的冲突问题,我们可以通过引入ngx_http_gzip_static_module模块来进行解决。该模块允许发送文件扩展名为.gz的预压缩文件。

🔔Tips:nginx默认不会添加该模块,需要我们自行引入。

配置指令:

作用域:http, server, location

语法:gzip_static on | off | always;

默认值gzip_static off;

gzip_static on;gzip_static off;都会检测是否存在.gz预压缩文件。

gzip_static always;会始终使用.gz预压缩文件。

1)对文件进行压缩,使用gzip命令

cd /usr/local/nginx/html
gzip jquery.js

2)修改配置文件

# gzip on;
gzip_static on;

我们再次访问http://192.168.110.98/jquery.js,文件大小为87.5KB,访问的是压缩过的.gz文件。

以上就是Nginx对静态资源传输的优化,Nginx是多模块化的,还有很多高级功能,我们后面继续探索。文章来源地址https://www.toymoban.com/news/detail-438019.html

到了这里,关于Nginx静态资源传输优化,文件高效传输,事半功倍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 成功解决 Nginx更新静态资源无效 ,Nginx静态资源更新不及时,Nginx清除缓存

    使用 nginx做动静分离,在将服务器中的静态资源修改后,访问页面,发现页面没有及时更新。 我这里是清除了浏览器缓存。 有关nginx禁止走缓存、直接走服务器请参考以下文章。 资料参考:Nginx更新静态资源不生效 我更新了静态资源下的一个文件。然后正常情况应该是在点

    2024年02月16日
    浏览(32)
  • 记录使用nginx部署静态资源流程,以及遇到的访问静态资源404问题

    将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署实现 动静分离 ,提高用户访问静态代码的速度,降低对后台应用访问,减轻后台服务器的压力。 这里我选择放在了 html文件夹 下,(也可以放在和html文件夹同级,或其它位置 打开 conf文件夹 打开总配置文

    2024年02月08日
    浏览(63)
  • Nginx(2)静态资源部署

    上网搜索访问资源是通过浏览器发送一个HTTP请求实现从客户端发送请求到服务器端获取所需要内容后并把内容回显展示在页面。这时所请求的内容就分为两种类型,一类是静态资源、一类是动态资源。 静态资源: 指在服务器端真实存在并且能直接拿来展示的一些文件,比如

    2024年02月07日
    浏览(45)
  • 【Nginx】静态资源部署(上)

    上网去搜索访问资源对于我们来说并不陌生,通过浏览器发送一个HTTP请求实现从客户端发送请求到服务器端获取所需要内容后并把内容回显展示在页面的一个过程。这个时候,我们所请求的内容就分为两种类型: 静态资源、 动态资源 静态资源即指在服务器端真实存在并且能

    2024年01月21日
    浏览(46)
  • nginx访问静态资源

    nginx访问静态资源 打开nginx配置文件 只需修改成或者添加一个location,就可以访问 html路径下所有文件了 如果只需要访问html特定文件夹内容,需要指定 效果

    2024年02月13日
    浏览(42)
  • Nginx访问静态资源配置

    关于 alias和root配置的说明: 一般情况下,在nginx配置中的良好习惯是: 1)在location /中,即路径为“ / ”时, 配置root目录; 2)在location /path中,即路径包含指定内容,如“ localtion /imgs ”时, 配置alias虚拟目录。

    2024年02月09日
    浏览(41)
  • 如何在nginx中配置静态资源

    ​ 在nginx中配置静态资源首先要保证你的项目是通过nginx来访问网关请求请求的!,因为静态资源是保存在nginx中的,可以大大的减少运行速度! ​ 首先,我们需要将静态资源导入到nginx中 譬如:你现在有一个静态资源的文件夹!包含你项目的所有静态资源,将其放入到ngi

    2024年02月16日
    浏览(48)
  • 高效学习方法和工具推荐,让你事半功倍!

    本文介绍了五种高效学习方法,包括制定详细的学习计划、集中注意力、不断复习、采用多种学习方式和利用小休息。同时,还推荐了五个高效学习工具和平台,包括Coursera、Duolingo、Quizlet、Khan Academy和Anki,让你在学习中事半功倍,轻松掌握知识! 制定详细的学习计划 制定

    2024年02月02日
    浏览(47)
  • 【Nginx】静态资源部署、反向代理、负载均衡

    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ nginx配置文件整体分为三部分: 全局块 :Nginx运行相关的全局配置 events块 :网络连接相关的配置 http块 :代

    2024年02月13日
    浏览(46)
  • Minio + Nginx 实现静态资源对外访问

            公司交付项目,文件服务java + minio实现文件基本功能。其中包含文件上传与下载与在线预览,由于文件下载功能实现方式问题(web直接调用文件预览接口,有minio直接返回可预览路径二次请求实现文件下载)。         在公司局域网内没有问题,到客户环境文件无法

    2024年02月08日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包