文件操作的优化
sendfile系统调用
语法:
sendfile on|off;
默认:
sendfile off;
配置块:
http
、
server
、
location
以启用
Linux
上的
sendfile
系统调用来发送文件,它减少了内核态与用户态之间的两次
内存复制,这样就会从磁盘中读取文件后直接在内核态发送到网卡设备,提高了发送文件的
效率
AIO系统调用
语法: aio on|off;
默认: aio off;
配置块: http、server、location
此配置项表示是否在
FreeBSD
或
Linux
系统上启用内核级别的异步文件
I/O
功能。注意,
它与
sendfile
功能是互斥的
directio
语法: directio size|off;
默认: directio off;
配置块: http、server、location
此配置项在
FreeBSD
和
Linux
系统上使用
O_DIRECT
选项去读取文件,缓冲区大小为
size
,
通常对大文件的读取速度有优化作用。注意,它与
sendfile
功能是互斥的。
directio_alignment
语法: directio_alignment size;
默认: directio_alignment 512;
配置块: http、server、location
它与
directio
配合使用,指定以
directio
方式读取文件时的对齐方式。一般情况下,
512B
已经足够了,但针对一些高性能文件系统,如
Linux
下的
XFS
文件系统,可能需要设置到
4KB
作为对齐方式
打开文件缓存
语法: open_file_cache max=N[inactive=time]|off;
默认: open_file_cache off;
配置块: http、server、location
文件缓存会在内存中存储以下
3
种信息:
文件句柄、文件大小和上次修改时间。
·已经打开过的目录结构。
·没有找到的或者没有权限操作的文件信息
该配置项后面跟
3
种参数:
·max:表示在内存中存储元素的最大个数。当达到最大限制数量后,将采用
LRU(Least Recently Used)算法从缓存中淘汰最近最少使用的元素。
inactive:表示在inactive指定的时间段内没有被访问过的元素将会被淘汰。默认时间为
60秒。
·off:关闭缓存功能
是否缓存打开文件错误的信息
语法: open_file_cache_errors on|off;
默认: open_file_cache_errors off;
配置块: http、server、location
此配置项表示是否在文件缓存中缓存打开文件时出现的找不到路径、没有权限等错误信
息
不被淘汰的最小访问次数
语法: 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
指定的最小次数,那么将不会被淘汰出缓存。
检验缓存中元素有效性的频率
语法: open_file_cache_valid time;
默认: open_file_cache_valid 60s;
配置块: http、server、location
默认为每60秒检查一次缓存中的元素是否仍有效。
对客户端请求的特殊处理
忽略不合法的HTTP头部
语法: ignore_invalid_headers on|off;
默认: ignore_invalid_headers on;
配置块: http、server
如果将其设置为
off
,那么当出现不合法的
HTTP
头部时,
Nginx
会拒绝服务,并直接向用
户发送
400
(
Bad Request
)错误。如果将其设置为
on
,则会忽略此
HTTP
头部。
HTTP头部是否允许下划线
语法: underscores_in_headers on|off;
默认: underscores_in_headers off;
配置块: http、server
默认为
off
,表示
HTTP
头部的名称中不允许带
“_”
(下划线)
对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。
DNS解析地址:
语法: resolver address...;
配置块: http、server、location
设置
DNS
名字解析服务器的地址,例如
resolver 127.0.0.1 192.0.2.1;
DNS解析的超时时间
语法: resolver_timeout time;
默认: resolver_timeout 30s;
配置块: http、server、location
此配置项表示DNS解析的超时时间