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基础入门之文件操作优化及请求特殊处理介绍的主要内容,如果未能解决你的问题,请参考以下文章

mysql优化-优化入门之MySQL的优化介绍及执行步骤

性能优化之基础资源cpu&内存(JVM)

LNMP架构搭建(基础入门级)

运维初学者怎样学习?

07《Nginx 入门教程》Nginx 的 Http 模块介绍(上)

Nginx基础入门之gzip常用配置项说明