Nginx基础入门之文件操作优化及请求特殊处理介绍
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx基础入门之文件操作优化及请求特殊处理介绍相关的知识,希望对你有一定的参考价值。
本节的内容主要讲到关于nginx文件操作优化以及对客户端请求特殊处理(比如限速,不合法请求处理,是否注明nginx版本号)
一.通过nginx对客户端相关请求做特殊处理
1.1 按HTTP方法名限制用户请求
语法:limit_except method ... {...}
配置块:location
Nginx通过limit_except后面指定的方法名来限制用户请求。方法名可取值包括:GET、HEAD、POST、PUT、DELETE、MKCOL、COPY、MOVE、OPTIONS、PROPFIND、PROPPATCH、LOCK、UNLOCK或者PATCH。例如:
limit_except GET { allow 192.168.1.0/32; deny all; }
注意,允许GET方法就意味着也允许HEAD方法。因此,上面这段代码表示的是禁止GET方法和HEAD方法,但其他HTTP方法是允许的。
1.2 HTTP请求包体的最大值(此选项也就是限制文件上传大小的选项)
语法:client_max_body_size size;
默认:client_max_body_size 1m;
配置块:http、server、location
浏览器在发送含有较大HTTP包体的请求时,其头部会有一个Content-Length字段,client_max_body_size是用来限制Content-Length所示值的大小的。因此,这个限制包体的配置非常有用处,因为不用等Nginx接收完所有的HTTP包体—这有可能消耗很长时间—就可以告诉用户请求过大不被接受。例如,用户试图上传一个10GB的文件,Nginx在收完包头后,发现Content-Length超过client_max_body_size定义的值,就直接发送413 ("Request Entity Too Large")响应给客户端。
1.3 对客户端请求的限速
语法:limit_rate speed;
默认:limit_rate 0;
配置块:http、server、location、if
此配置是对客户端请求限制每秒传输的字节数。默认参数为0,表示不限速。
1.4 limit_rate_after
语法:limit_rate_after time;
默认:limit_rate_after 1m;
配置块:http、server、location、if
此配置表示Nginx向客户端发送的响应长度超过limit_rate_after后才开始限速。例如:
limit_rate_after 1m; limit_rate 100k;
1.5 对客户端请求的特殊处理
下面介绍对客户端请求的特殊处理的配置项。
1.5.1 忽略不合法的HTTP头部
语法:ignore_invalid_headers on | off;
默认:ignore_invalid_headers on;
配置块:http、server
如果将其设置为off,那么当出现不合法的HTTP头部时,Nginx会拒绝服务,并直接向用户发送400(Bad Request)错误。如果将其设置为on,则会忽略此HTTP头部。
1.5.2 HTTP头部是否允许下画线
语法:underscores_in_headers on | off;
默认:underscores_in_headers off;
配置块:http、server
默认为off,表示HTTP头部的名称中不允许带“_”(下画线)。
1.5.3 对If-Modified-Since头部的处理策略
语法:if_modified_since [off|exact|before];
默认:if_modified_since exact;
配置块:http、server、location
出于性能考虑,Web浏览器一般会在客户端本地缓存一些文件,并存储当时获取的时间。这样,下次向Web服务器获取缓存过的资源时,就可以用If-Modified-Since头部把上次获取的时间捎带上,而if_modified_since将根据后面的参数决定如何处理If-Modified-Since头部。
相关参数说明如下。
off:表示忽略用户请求中的If-Modified-Since头部。这时,如果获取一个文件,那么会正常地返回文件内容。HTTP响应码通常是200。
exact:将If-Modified-Since头部包含的时间与将要返回的文件上次修改的时间做精确比较,如果没有匹配上,则返回200和文件的实际内容,如果匹配上,则表示浏览器缓存的文件内容已经是最新的了,没有必要再返回文件从而浪费时间与带宽了,这时会返回304 Not Modified,浏览器收到后会直接读取自己的本地缓存。
before:是比exact更宽松的比较。只要文件的上次修改时间等于或者早于用户请求中的If-Modified-Since头部的时间,就会向客户端返回304 Not Modified。
1.5.4 文件未找到时是否记录到error日志
语法:log_not_found on | off;
默认:log_not_found on;
配置块:http、server、location
此配置项表示当处理用户请求且需要访问文件时,如果没有找到文件,是否将错误日志记录到error.log文件中。这仅用于定位问题。
1.5.5 merge_slashes
语法:merge_slashes on | off;
默认:merge_slashes on;
配置块:http、server、location
此配置项表示是否合并相邻的“/”,例如,//test///a.txt,在配置为on时,会将其匹配为location /test/a.txt;如果配置为off,则不会匹配,URI将仍然是//test///a.txt。
1.5.6 DNS解析地址
语法:resolver address ...;
配置块:http、server、location
设置DNS名字解析服务器的地址,例如:
resolver 127.0.0.1 192.0.2.1;
1.5.7 DNS解析的超时时间
语法:resolver_timeout time;
默认:resolver_timeout 30s;
配置块:http、server、location
此配置项表示DNS解析的超时时间。
1.5.8 返回错误页面时是否在Server中注明Nginx版本
语法:server_tokens on | off;
默认:server_tokens on;
配置块:http、server、location
表示处理请求出错时是否在响应的Server头部中标明Nginx版本,这是为了方便定位问题。
二.配置nginx文件操作优化
以下面为nginx文件操作的优化配置项。
2.1 sendfile系统调用
语法:sendfile on | off;
默认:sendfile off;
配置块:http、server、location
可以启用Linux上的sendfile系统调用来发送文件,它减少了内核态与用户态之间的两次内存复制,这样就会从磁盘中读取文件后直接在内核态发送到网卡设备,提高了发送文件的效率。语法:aio on | off;
2.2 AIO系统调用
语法:aio on | off;
默认:aio off;
配置块:http、server、location
此配置项表示是否在FreeBSD或Linux系统上启用内核级别的异步文件I/O功能。注意,它与sendfile功能是互斥的。
2.3 directio
语法:directio size | off;
默认:directio off;
配置块:http、server、location
此配置项在FreeBSD和Linux系统上使用O_DIRECT选项去读取文件,缓冲区大小为size,通常对大文件的读取速度有优化作用。注意,它与sendfile功能是互斥的。
2.3 directio_alignment
语法:directio_alignment size;
默认:directio_alignment 512;
配置块:http、server、location
它与directio配合使用,指定以directio方式读取文件时的对齐方式。一般情况下,512B已经足够了,但针对一些高性能文件系统,如Linux下的XFS文件系统,可能需要设置到4KB作为对齐方式。
2.5 打开文件缓存
语法:open_file_cache max = N [inactive = time] | off;
默认:open_file_cache off;
配置块:http、server、location
文件缓存会在内存中存储以下3种信息:
1.文件句柄、文件大小和上次修改时间。
2.已经打开过的目录结构。
3.没有找到的或者没有权限操作的文件信息。
这样,通过读取缓存就减少了对磁盘的操作。
该配置项后面跟3种参数。
1.max:表示在内存中存储元素的最大个数。当达到最大限制数量后,将采用LRU(Least Recently Used)算法从缓存中淘汰最近最少使用的元素。
2.inactive:表示在inactive指定的时间段内没有被访问过的元素将会被淘汰。默认时间为60秒。
3.off:关闭缓存功能。
例如:
open_file_cache max=1000 inactive=20s;
2.6是否缓存打开文件错误的信息
语法:open_file_cache_errors on | off;
默认:open_file_cache_errors off;
配置块:http、server、location
此配置项表示是否在文件缓存中缓存打开文件时出现的找不到路径、没有权限等错误信息。
2.7 不被淘汰的最小访问次数
语法:open_file_cache_min_uses number;
默认:open_file_cache_min_uses 1;
配置块:http、server、location
它与open_file_cache中的inactive参数配合使用。如果在inactive指定的时间段内,访问次数超过了open_file_cache_min_uses指定的最小次数,那么将不会被淘汰出缓存。
2.8 检验缓存中元素有效性的频率
语法:open_file_cache_valid time;
默认:open_file_cache_valid 60s;
配置块:http、server、location
默认为每60秒检查一次缓存中的元素是否仍有效
本文出自 “菜鸟的成长记” 博客,请务必保留此出处http://blief.blog.51cto.com/6170059/1739511
以上是关于Nginx基础入门之文件操作优化及请求特殊处理介绍的主要内容,如果未能解决你的问题,请参考以下文章