在详细使用说明上里,对nginx的一个部分已经进行了说明。这节开始解析http部分。
在当前我的nginx.conf的配置如下:
可以看到配置项还是非常多的(这是LNMP包自动默认的配置选项)。
1.Include mime.types 这是nginx加载当前的一个mime.types类型打开,可以看到该文件对应的是
这里大致说明下mime.types的概念:主要是接收到一个对应后缀的文件后,本地浏览器会根据对应的文件类型按照特定的格式进行解析(这样我们才能把文件和声音按照正确的格式在浏览器前面显示出来,例如Content-type: text/html 这是告诉浏览器该文本是html文件,请按照html文件进行解析)这个配置会让nginx根据不同的文件后缀赋予不同的文件头。(如果你自己制造了一种文件后缀,又没有在这里进行说明,前端就无法识别类型,从而可能出现无法加载的情况)
2.default_type 默认类型mime设置(当出现无法识别的后缀名的时候,会告诉浏览器是该类型) 这里application/octet-stream 这代表任意的二进制数据传输。
告诉浏览器,当默认没有设定mime.types的时候,用二进制数据传输格式进行传递
3.
配置多个虚拟机server的时候,这个是必须填的。否则会启动失败(默认情况下是没有该配置的)
该功能说明:保存服务器名字的hash表(hash表就是服务器的唯一识别标记,用空间换取时间的时候进行使用,可以让系统最快速的找到对应的访问的服务器)
server_names_hash_max_size 和 server_names_hash_bucket_size俩个参数是用来决定域名名字的hash大小参数
4.
客户端header头部缓存大小限定(在http通讯的时候,文档之前都有一个header的,可以用这个参数来控制对客户端头部信息的输出)
这几个参数的作用顺序是,会优先分配一个内存给一个主机,如果发现不够用,就会分配large_client_header_buffers 的数值。主要是用来避免不必要的内存浪费。如果再次超过了最大的设置,直接报错 414。另外该参数是可以在server的配置里面进行覆盖掉外部的默认设置的。Client_max_body_size 限制输出长度的,这个比较容易理解。
5.sendfile on; #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
6.Tcp_nopush;
防止网络阻塞使用:表示达到最大值后,一次性发送输出去(对于大网页文件特别需要到了最大的负荷后发出去,频繁的发出数据容易引起网络阻塞,该参数默认是开启的)
7.
该参数的配置有点抽象,在tcp协议里,TCP_NODELAY和TCP_CORK基本上控制了包的“Nagle化”,TCP_NODELAY.Nagle化在这里的含义是采用Nagle算法把较小的包组装为更大的帧。(否则对每个非常小的响应都会自带一个数据包形成网络阻塞,关闭后可以更快的进行响应)
8.
客户端的连接时间 这个是比较容易理解的。
9.
因为传统的cgi有太多漏洞,nginx对其是不支持的,所以默认情况下,nginx都是采用fastcgi的模式进行访问。而php5.0以后内置了fastcgi,server里面会引入对应执行php,这里默认fastcgi的运行支持
fastcgi_connect_timeout=300; #连接到后端fastcgi超时时间
fastcgi_send_timeout=300; #向fastcgi请求超时时间(这个指定值已经完成两次握手后向fastcgi传送请求的超时时间)
fastcgi_rend_timeout=300; #接收fastcgi应答超时时间,同理也是2次握手后
fastcgi_buffer_size=64k; #读取fastcgi应答第一部分需要多大缓冲区,该值表示使用1个64kb的缓冲区读取应答第一部分(应答头).
fastcgi_buffers 4 64k;#指定本地需要多少和多大的缓冲区来缓冲fastcgi应答请求,假设一个php或java脚本所产生页面大小为256kb,那么会为其分配4个64kb的缓冲来缓存;若页面大于256kb,那么大于的256kb的部分会缓存到fastcgi_temp指定路径中,这并非是个好办法,内存数据处理快于硬盘,一般该值应该为站点中php/java脚本所产生页面大小中间值,如果站点大部分脚本所产生的页面大小为256kb,那么可把值设置为16 16k,4 64k等
fastcgi_busy_buffers_size 128k; #默认值是fastcgi_buffer的2倍
fastcgi_temp_file_write_size 128k;#写入缓存文件使用多大的数据块,默认值是fastcgi_buffer的2倍
10.gzip模块一部分解释
gzip on|off
# 默认值: gzip off
# 开启或者关闭gzip模块
gzip_min_length 1k
# 默认值: 0 ,不管页面多大都压缩
# 设置允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取。
# 建议设置成大于1k的字节数,小于1k可能会越压越大。 即: gzip_min_length 1024
gzip_buffers 4 16k
# 默认值: gzip_buffers 4 4k/8k
# 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。 例如 4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k 代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存。
# 如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。
gzip_http_version 1.0|1.1
# 默认值: gzip_http_version 1.1(就是说对HTTP/1.1协议的请求才会进行gzip压缩)
# 识别http的协议版本。由于早期的一些浏览器或者http客户端,可能不支持gzip自解压,用户就会看到乱码,所以做一些判断还是有必要的。
# 注:99.99%的浏览器基本上都支持gzip解压了,所以可以不用设这个值,保持系统默认即可。
# 假设我们使用的是默认值1.1,如果我们使用了proxy_pass进行反向代理,那么nginx和后端的upstream server之间是用HTTP/1.0协议通信的,如果我们使用nginx通过反向代理做Cache Server,而且前端的nginx没有开启gzip,同时,我们后端的nginx上没有设置gzip_http_version为1.0,那么Cache的url将不会进行gzip压缩