Nginx 文件传输效率、实时、压缩配置指令
# 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 文件传输效率、实时、压缩配置指令的更多相关文章
- nginx.conf中关于nginx-rtmp-module配置指令详解
译序:截至 Jul 8th,2013 官方公布的最新 Nginx RTMP 模块 nginx-rtmp-module 指令详解.指令Corertmp语法:rtmp { ... }上下文:根描述:保存所 ...
- Nginx基础配置指令
nginx.conf文件的结构 ... #全局块 events{ #events块 ... } http{ #http块 ... #http全局块 server{ #server块 ... #serv ...
- 2.4 Nginx服务器基础配置指令
2.4.1 nginx.conf文件的结构 2.4.2配置运行Nginx服务器用户(组) 2.4.3配置允许生成的worker process数 2.4.4 配置Nginx进程PID存放路径 2.4. ...
- 正向代理/反向代理理解、Nginx概述、安装及配置详解
一.Nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理, ...
- Nginx概述、安装及配置详解
nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外 ...
- nginx反向代理原理及配置详解
nginx概述nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外n ...
- Nginx Gzip 压缩配置
Nginx Gzip 压缩配置 随着nginx的发展,越来越多的网站使用nginx,因此nginx的优化变得越来越重要,今天我们来看看nginx的gzip压缩到底是怎么压缩的呢? gzip(GNU-Z ...
- Nginx 配置指令的执行顺序(四)
ngx_lua 模块提供了配置指令 access_by_lua,用于在 access 请求处理阶段插入用户 Lua 代码.这条指令运行于 access 阶段的末尾,因此总是在 allow 和 deny ...
- (转)nginx日志配置指令详解
这篇文章主要介绍了nginx日志配置指令详解,nginx有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志,需要的朋友可以参考下日志对于统计排错来说非常有利的.本文总结了nginx日 ...
随机推荐
- 评估海外pop点网络质量,批量探测到整个国家运营商ip地址段时延
1 查询当地供应商所有AS号和IP地址段,如下 可以手动复制也可以爬下来,此次测试地址不多,手动复制下来再做下格式话 61.99.128.0/17 61.99.0.0/16 61.98.96.0/20 ...
- layui数据表格导入数据
作为一个后端程序员,前端做的确实很丑,所以就学习了一下layui框架的使用.数据表格主要的问题就是传输数据的问题,这里我用我的前后端代码来做一个实际的分解. 前端部分 可以到layui官网示例中找到数 ...
- linux篇-CentOS7搭建NTP服务器
1查看服务器.客户端操作系统版本 2查看服务器是否安装ntp 3如果没有安装 4安装完成后重新查看服务器是否安装ntp 5查看ntp服务器状态 6修改配置文件 注释 #server 0.centos. ...
- 虚拟环境与django版本与视图层相关知识
目录 虚拟环境 django版本区别 视图函数返回值 JsonResponse对象 form表单上传文件 request方法 FBV与CBV CBV源码剖析 模板语法传值 传值方式 传值范围 虚拟环境 ...
- MongoDB 安全认证
每日一句 Sometimes your whole life boils down to one insane move. 人一生中出人头地的机会不多,一旦有了一定要抓住! 概述 默认情况下,Mong ...
- 这篇 DNS ,写的挺水的。
试想一个问题,我们人类可以有多少种识别自己的方式?可以通过身份证来识别,可以通过社保卡号来识别,也可以通过驾驶证来识别,尽管有多种识别方式,但在特定的环境下,某种识别方法会比其他方法更为适合.因特网上 ...
- CA证书介绍与格式转换
CA证书介绍与格式转换 概念 PKCS 公钥加密标准(Public Key Cryptography Standards, PKCS),此一标准的设计与发布皆由RSA资讯安全公司(英语:RSA Sec ...
- 深入C++03:面向对象
面向对象 类和对象.this指针 不用做太多笔记,都可以看初识C++的笔记: 记住:声明后面都要加":",比如声明方法和变量还有class结束的地方:而实现函数出来的地方是不需要加 ...
- CentOS8安装mysql8.0具体步骤
操作系统:CentOS Linux release 8.0及以上 Mysql版本:Mysql 8.0.22 x86_64 (MySQL Community Server - GPL) Mysql8下载 ...
- 【Golang】创建有配置参数的结构体时,可选参数应该怎么传?
写在前面的话 Golang中构建结构体的时候,需要通过可选参数方式创建,我们怎么样设计一个灵活的API来初始化结构体呢. 让我们通过如下的代码片段,一步一步说明基于可选参数模式的灵活 API 怎么设计 ...