# 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:不管客户端浏览器支持不支持都发送压缩后的文件

最新文章

  1. learn python, ref, diveintopython 分类: python 2015-07-22 14:42 14人阅读 评论(0) 收藏
  2. Redis的持久化的两种方式drbd以及aof日志方式
  3. Nodejs Http发送post请求
  4. poj1502 spfa最短路
  5. Xcode 插件失效的临时解决方案
  6. ***微信公众平台开发: 获取用户基本信息+OAuth2.0网页授权
  7. C语言带参数的main()函数
  8. 射频识别技术漫谈(26)——Felica的文件系统
  9. 关于ios原声嵌入web页面的问题
  10. UIAlertView使用全解
  11. ionic 添加新module
  12. Python网络编程(2)-粘包现象及socketserver模块实现TCP并发
  13. openvon安装
  14. BootStrap的表格加载json数据,并且可以搜索,选择
  15. virtualBox 虚拟机下nginx设置不缓存静态文件不起作用解决办法
  16. 几个api看看
  17. 使用yum下载rpm包
  18. MySQL内置函数获取几天前的日期
  19. FZU Problem 2105 Digits Count
  20. 关于Eclipse

热门文章

  1. 渗透:wesside-ng
  2. syc-day2
  3. SQL Server导出MDF数据库文件
  4. ExtJS 布局-VBox布局(VBox layout)
  5. 聊聊C#中的composite模式
  6. ABAP CDS - DEFINE VIEW, view_annot
  7. DAST 黑盒漏洞扫描器 第五篇:漏洞扫描引擎与服务能力
  8. bat-安装程序-切换路径的问题(小坑)
  9. JQuery select与radio的取值与赋值
  10. MySql查看索引以及各字段含义