文件操作的优化

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解析的超时时间