# sendfile  开启文件高效传输模式
# 默认值:off
# 位置:http、servcer、location……
# 开启和不开启worker访问的文件发送到浏览器的过程不同。
# 不开启的时候worker进程先调用read()函数将数据读取致缓存,然后返回给浏览器
# 开启之后worker进程直接调用sendfile()将文件在缓存中通过句柄发送给浏览器了
sendfile on|off; # tcp_nopush 该指令必须在sendfile打开的时候才会生效,主要是用来提高网络包的传输'效率'
# 语法:tcp_nopush on|off
# 默认值: off
# 位置:http、server、location
tcp_nopush on|off; # tcp_nodelay 该指令必须在keep-alive开启的情况下才生效,来提高网络包传输的‘实时性’
# 语法:tcp_nodelay on|off
# 默认值:on
# 位置:http、server、location
# tcp_nopush 、tcp_nodelay 之间的关系是互斥的
# 大家都知道tcp每个包传输的时候其中可能99%都是协议的内容,%1是我们真实要发送到客户端的内容,
# tcp_nopush就是要等数据达到规定大小的时候才发送出去,这样就提高了发送数据的效率,但于此同时却缺乏了发送数据的实时性,tcp_nodelay 就和tcp_nopush相反,只要有数据就发送。
# 后面随着linux系统和Nginx的更新,这两个指令可以同时设置为on,linux系统会判定发送文件的时候启用tcp_nopush 模式,其他时候看情况适用tcp_nodelay 模式。具体是怎么应用还需要进一步查证。
tcp_nodelay on; # ngx_http_gzip_module 模块
# nginx内置了很多模块,这些模块的使用在nginx官方都是有说明文档的
# gzip、gzip_types配置指令就是来配置ngx_http_gzip_module
# gzip、gzip_types是来配置浏览器访问文件的时候是否先将文件压缩后传输
# gzip是用来是指是否启用或关闭压缩功能
# gzip_types是用来控制只对哪些文件类型进行压缩,它对应的值是mime.type文件中的值
# 位置 http、server、location
# 语法:
gzip on|off; # 默认off
gzip_type mome-type1 mome-type2 ...; # 默认 text/html
# 之所以要用gzip_type指定类型,是因为有些图片或者文件,它本身就已经压缩了,你通过nginx再次对它压缩的效果其实不大,反而大大增加了服务器运算。
# 所以不建议直接设置成gzip_type *; # gzip_comp_level指令,该指令可以设置压缩级别1-9,数值越低压缩耗时越低,同时压缩程度越低,
# 数值越高,压缩耗时越高(也就是运算复杂度越高),但压缩成都越好。
# 一般不建议直接设置成1或者9,建议使用6(中间值)就可以了,因为设置6级和9级压缩后文件的大小变化其实并没有预想的那么好。
# 语法 gzip_comp_level level;
# 默认值:1
# 位置: http、server、location
gzip_comp_level 6; # gzip_vary指令:设置http的请求头中是否包含Vary: Accept-Encoding;值来告诉浏览器我们传输的文件是进行过gzip压缩的。
# 语法: gzip_vary on|off
# 默认:off
# 位置 http、server、location
gzip_vary on; # gzip_buffers指令:该指令用于处理请求压缩的缓冲去数量和大小。对文件进行压缩的时候需要用到缓存,这里就是设置压缩时申请缓存大小。一般该指令不建议去修改它的默认值。32bit和64bit它的默认值是不同的,
# 语法:gzip_buffers number size;
# number 数量,size是大小,number*size等于缓冲区内存大小
# 默认值:gzip_buffers 32 4k | 16 8k;
# 位置 http、server、location # 选择性开启或者关闭gzip压缩功能
# 如果浏览器发送的http请求头User-Agent的值符合regex 就启用gzip,否则就不启用。
# User-Agent是浏览器和操作系统的相关信息,防止某些浏览器版本不支持gzip。
# 语法: gzip_disable regex ...;
# gzip_disable "Mozilla/5.0.*";
# 语法:gzip_http_version 1.0|1.1;
# 默认:1.1 一般不用改动它
# gzip_http_version 通过http请求版本来控制是否启用gzip
# gzip_min_length length; 如果请求的内容小于length的时候就不启用gzip功能。
# 页面大小可以通过Content-Length来获取。
# 默认:20kb,当数值后面没有跟单位的时候,默认b单位
gzip_min_length 20;
# 单位有 bytes[字节]/kb[千字节]/m[兆]
# gzip_proxied指令是在反向代理的时候使用
# 当满足某些条件的时候启用gzip
# 语法 gzip_proxied off|expired|no_cache|no-store|private|no_last_modifield|no_etag|auth|any;
# 默认值:off
# off 关闭Nginx服务器对后台服务器返回结果的gzip压缩
# expired 启用压缩,如果header头中包含“Expires”头信息
# no-cache 启用压缩,如果header头中包含“Cache-Control:no_cache”头信息
# no-store 启用压缩,如果header头中包含“Cache-Control:no_store”头信息
# no-private 启用压缩,如果header头中包含“Cache-Control:private”头信息
# no_last_modifield 启用压缩,如果header头中不包含"Last-Modifield"头信息
# no_etag 启用压缩,如果header头中不包含"ETag"头信息
# auth 启用压缩,如果header头中包含"Authoriztion"头信息
# any 无条件启用压缩 # gzip和sendfile共存问题
# 在浏览器访问服务器文件的时候,文件从服务器返回致浏览器经过了三个缓存区
# 分别是:1.服务端收到请求时应用程序向内核发送read读取文件指令,然后内核去读取文件到内核缓冲区,
# 2.再冲内核缓冲区返回到应用程序缓冲区,
# 3.再由应用程序把文件内容冲应用程序缓冲区发送到Socket缓冲区返回到浏览器。
# 而sendfile省去了第2步骤,当服务器接收到请求时,直接将要传递的文件名通过sendfile函数告诉内核要发送到哪个Socket缓存。那么内核读取到文件后并不返回到应用程序缓冲区,而是直接将文件读取到和内核缓冲后直接copy到Socket缓冲区完成返回。
# 那么问题来了,gzip压缩是需要在应用程序中执行压缩的,然而你启用了sendfile模式那么就无法使用gzip的功能。
# 后面Nginx新增了ngx_http_gzip_static_module模块去处理它
# 指令:gzip_static on | off | always;
# 注意,ngx_http_gzip_static_module在Nginx安装的时候,默认是不安装的,所以你要用的话需要手动通过./configure去配置升级。
# 它的处理流程是:在文件发送前先一步将文件内容压缩打包成.gz后缀的压缩包,等用的时候直接使用把压缩包返回到浏览器。这样做好处也是挺大的。
# 那么.gz文件是什么时候生成的呢
# 是通过命令来的,下面就是 jquery.js打包成 jquery.js.gz
gzip jquery.js
# on:当客户端浏览器支持就发送压缩后的文件,而不是原文件
# off:关闭
# always:不管客户端浏览器支持不支持都发送压缩后的文件

Nginx 文件传输效率、实时、压缩配置指令的更多相关文章

  1. nginx.conf中关于nginx-rtmp-module配置指令详解

    译序:截至 Jul 8th,2013 官方公布的最新 Nginx RTMP 模块 nginx-rtmp-module 指令详解.指令Corertmp语法:rtmp { ... }上下文:根描述:保存所 ...

  2. Nginx基础配置指令

    nginx.conf文件的结构 ... #全局块 events{ #events块 ... } http{ #http块 ... #http全局块 server{ #server块 ... #serv ...

  3. 2.4 Nginx服务器基础配置指令

    2.4.1 nginx.conf文件的结构 2.4.2配置运行Nginx服务器用户(组) 2.4.3配置允许生成的worker process数 2.4.4 配置Nginx进程PID存放路径 2.4. ...

  4. 正向代理/反向代理理解、Nginx概述、安装及配置详解

    一.Nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理, ...

  5. Nginx概述、安装及配置详解

    nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外 ...

  6. nginx反向代理原理及配置详解

    nginx概述nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外n ...

  7. Nginx Gzip 压缩配置

    Nginx Gzip 压缩配置 随着nginx的发展,越来越多的网站使用nginx,因此nginx的优化变得越来越重要,今天我们来看看nginx的gzip压缩到底是怎么压缩的呢? gzip(GNU-Z ...

  8. Nginx 配置指令的执行顺序(四)

    ngx_lua 模块提供了配置指令 access_by_lua,用于在 access 请求处理阶段插入用户 Lua 代码.这条指令运行于 access 阶段的末尾,因此总是在 allow 和 deny ...

  9. (转)nginx日志配置指令详解

    这篇文章主要介绍了nginx日志配置指令详解,nginx有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志,需要的朋友可以参考下日志对于统计排错来说非常有利的.本文总结了nginx日 ...

随机推荐

  1. spring boot 统一接口异常返回值

    创建业务 Exception 一般在实际项目中,推荐创建自己的 Exception 类型,这样在后期会更容易处理,也比较方便统一,否则,可能每个人都抛出自己喜欢的异常类型,而造成代码混乱 Servic ...

  2. 496. Next Greater Element I - LeetCode

    Question 496. Next Greater Element I Solution 题目大意:给你一个组数A里面每个元素都不相同.再给你一个数组B,元素是A的子集,问对于B中的每个元素,在A数 ...

  3. 693. Binary Number with Alternating Bits - LeetCode

    Question 693. Binary Number with Alternating Bits Solution 思路:输入一个整数,它的二进制01交替出现,遍历其二进制字符串,下一个与上一个不等 ...

  4. unity---小地图制作

    脚本控制移动 public float moveSpeed =5f; public float roundSpeed=120f; void Update() { this.transform.Tran ...

  5. AWD平台搭建及遇到的问题分析

    1.安装docker环境 a.使用的是ubuntu系统,通过sudo apt install docker.io进行docker得安装,此方式会自动启动docker服务. b.通过curl -s ht ...

  6. 使用C#和MonoGame开发俄罗斯方块游戏

    小的时候就看到有同学使用C语言在DOS下做过一款俄罗斯方块的游戏,当时是启用了DOS的图形化模式,感觉也挺有意思.最近上海疫情封控在家,周末也稍微有点空余时间,于是使用Visual Studio 20 ...

  7. React history.push()无法跳转 url改变页面不渲染

    一.history.push()无法跳转参考了很多文章 研究一下生命周期 render是要有state变化才会执行 BrowserHistory只有props变化 无法触发render 如下改造环境 ...

  8. SpringBoot Restful 接口实现

    目录 SpringBoot 核心注解 SpringBoot Restful 接口实现 封装响应数据 SpringBoot 核心注解 SpringBoot 基础入门 注解 说明 Component 声明 ...

  9. 《Unix 网络编程》14:高级 I/O 函数

    高级 I/O 函数 ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...

  10. layui 数据表格 数据更新完成后数据刷新

    模拟点击分页确定刷新数据 $(".layui-laypage-btn")[0].click()