Nginx 基础概念

日期:20181117

        个人小站: www.winthcloud.top


目录

http协议基本概念

资源加速

http MPM (Multiple Process Module)

I/O类型(synchronous, asyncronous, blocking, nonblocking)

I/O模型(重点)

同步阻塞IO模型

同步非阻塞IO模型

I/O多路复用模型

信号驱动IO模型 signal-driven

异步IO 

I/O模型的具体实现

select/poll/epoll

Nginx介绍

nginx的程序架构

nginx模块

nginx的功用

nginx配置

正常运行必备的配置

性能优化相关的配置

事件驱动相关的配置

调试和定位问题log,daemon

ngx_http_core_module模块相关配置

与套接字相关的配置: 

server

listen

server_name

tcp_nodelay

sendfile

server_token

定义路径相关的配置: 

location

root

alias

index

error_page

try_files

定义客户端请求的相关配置: 

keepalive_{timeout,requests,disable}, 

send_timeout

client_body_buffer_size

client_body_temp_path

对客户端进行限制的相关配置: 

limit_rate

limit_except 

文件操作优化的配置: 

aio

directio

open_file_cache

open_file_cache_errors

open_file_cache_min_uses

open_file_cache_valid


Nginx (web server, web reverse proxy)http协议基本概念


http protocal: 80/tcp, HyperText Transfer Protocal

html: HyperText Mark Language

文本: HTTP:/1.1, MIME


MIME Multipurpose Internet Mail Extension

major/minor

text/plain

image/jpeg


URI Uniform Resorce Identifier

URL Uniform Resource Locator

URL scheme://server[:port]/path/source


http事务 request <--> response

request:

<method> <URL> <version>

<HEAD>


<BODY>


response:

<version> <status> <reason phrase>

<HEADERS>


<BODY>


协议格式: 文本,二进制


method:

GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS


status:

1XX 信息类

2XX 成功类200

3XX 重定向类

4XX 客户端错误

5XX 服务端错误


HEADER

通用首部

请求首部

响应首部

实体首部

扩展首部


PV: page view

UV: user view


资源加速

浏览器限制打开的线程是基于单个域名的,如某浏览器对域名可请求的线程数限制是4,如果请求

某个单个页面时,该页面里如果2个其它域名它可以同时启动12个线程去加载页面


http MPM (Multiple Process Module)

prefork, worker, event

prefork: 主进程,生成多个子进程,每个子进程处理一个请求

worker: 主进程,生成多个子进程,每个子进程生成多个线程,每个线程响应一个请求

event: 主进程,生成多个子进程,每个子进程响应多个请求


I/O类型(synchronous, asyncronous)

同步和异步synchronous, asyncronous

关注的是消息通知机制


同步:调用发出之后不会立即返回,但一旦返回,则返回即是最终结果

异步:调用发出之后,被调用方立即返回消息,但返回的并非最终结果,被调用者通过

状态、通知机制来通知调用者,或通过回调函数来处理结果


阻塞和非阻塞 block, nonblock

关注的是调用者等待被调用者返回调用结果时的状态


阻塞:调用结果返回之前,调用者会被挂起,调用者只有在得到返回结果之后才能继续操作

非阻塞: 调用者在结果返回之前,不会被挂起,即调用不会阻塞调用者的其它操作 



I/O模型(重点)

blocking IO

nonblocking IO


IO multiplexing 复用

进程将IO调用交由以下的系统调用来完成从磁盘加载文件至内核

select()

poll()

有限制最多同时接受1024个并发调用

prefork和worker就是使用此种模型,如果阻塞型进程则阻塞在调用select()之上

但是其第二段将数据由内核空间复制到内核空间的阶段还是阻塞的

虽然看似阻塞但是select()由于是个代理帮进程去调用真正处理将硬盘文件加载至内核

空间的系统调用,在此期间它还可以接收其它进程的io调用请求


signal driven

sigIO 

此种IO模型在其第一段将IO请求的数据由磁盘加载至内核空间的这段时间里,进程

可以再次接收其它请求,但在第二段由内核空间复制数据至进程空间时,此段是阻塞

的无法再处理其它请求

通知

水平触发 多次通知进程取数据

边缘触发 只通知一次


asynchronous IO

sigIO的升级,两个阶段都解放,即进程发送IO请求后就可以再次接收其它请求,两个阶

段的处理完成后会给进程发送信号,进程直接可以去指定的内存空间取数据进行操作


模型由上至下,其编程的难度逐步增强


Nginx最被设计时用的就是事件驱动式IO,而且使用边缘触发机制,并且还支持异步

IO,和mmaping机制,设计之初就是做高并发的处理能力的web应用服务器程序


同步/异步:关注的是消息通信机制

同步:synchronous,调用者等待被调用者返回消息,才能继续执行

异步:asynchronous,被调用者通过状态、通知或回调机制主动通知调用者被调用者

的运行状态

阻塞/非阻塞:关注调用者在等待结果返回之前所处的状态

阻塞:blocking,指IO操作需要彻底完成后才返回到用户空间,调用结果返回之前,

调用者被挂起

非阻塞:nonblocking,指IO操作被调用后立即返回给用户一个状态值,无需等到IO操

作彻底完成,最终的调用结果返回之前,调用者不会被挂起

I/O模型:

阻塞型、非阻塞型、复用型、信号驱动型、异步



同步阻塞IO模型

同步阻塞IO模型是最简单的IO模型,用户线程在内核进行IO操作时被阻塞

用户线程通过系统调用read发起IO读操作,由用户空间转到内核空间。内核等到数据包

到达后,然后将接收的数据拷贝到用户空间,完成read操作

用户需要等待read将数据读取到buffer后,才继续处理接收的数据。整个IO请求的过

程中,用户线程是被阻塞的,这导致用户在发起IO请求时,不能做任何事情,对CPU的

资源利用率不够



同步非阻塞IO模型


用户线程发起IO请求时立即返回。但并未读取到任何数据,用户线程需要不断地发起IO

请求,直到数据到达后,才真正读取到数据,继续执行。即 “轮询”机制

整个IO请求的过程中,虽然用户线程每次发起IO请求后可以立即返回,但是为了等到数

据,仍需要不断地轮询、重复请求,消耗了大量的CPU的资源

是比较浪费CPU的方式,一般很少直接使用这种模型,而是在其他IO模型中使用非阻

塞IO这一特性



I/O多路复用模型


IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,就通知该进程

多个连接共用一个等待机制,本模型会阻塞进程,但是进程是阻塞在select或者poll这

两个系统调用上,而不是阻塞在真正的IO操作上

用户首先将需要进行IO操作添加到select中,继续执行做其他的工作(异步),同时等

待select系统调用返回。当数据到达时,IO被激活,select函数返回。用户线程正式发

起read请求,读取数据并继续执行

从流程上来看,使用select函数进行IO请求和同步阻塞模型没有太大的区别,甚至还多了

添加监视IO,以及调用select函数的额外操作,效率更差。并且阻塞了两次,但是第一次

阻塞在select上时,select可以监控多个IO上是否已有IO操作准备就绪,即可达到在同

一个线程内同时处理多个IO请求的目的。而不像阻塞IO那种,一次只能监控一个IO

虽然上述方式允许单线程内处理多个IO请求,但是每个IO请求的过程还是阻塞的(在select

函数上阻塞),平均时间甚至比同步阻塞IO模型还要长。如果用户线程只是注册自己需要的

IO请求,然后去做自己的事情,等到数据到来时再进行处理,则可以提高CPU的利用率

IO多路复用是最常使用的IO模型,但是其异步程度还不够“彻底”,因它使用了会阻塞线程

的select系统调用。因此IO多路复用只能称为异步阻塞IO模型,而非真正的异步IO



信号驱动IO模型


信号驱动IO:signal-driven I/O

用户进程可以通过sigaction系统调用注册一个信号处理程序,然后主程序可以继续向下

执行,当有IO操作准备就绪时,由内核通知触发一个SIGIO信号处理程序执行,然后将用

户进程所需要的数据从内核空间拷贝到用户空间

此模型的优势在于等待数据报到达期间进程不被阻塞。用户主程序可以继续执行,只要等待

来自信号处理函数的通知



异步IO模型


异步IO与信号驱动IO最主要的区别是信号驱动IO是由内核通知何时可以进行IO操作,而

异步IO则是由内核告诉用户线程IO操作何时完成。信号驱动IO当内核通知触发信号处理

程序时,信号处理程序还需要阻塞在从内核空间缓冲区拷贝数据到用户空间缓冲区这个

阶段,而异步IO直接是在第二个阶段完成后,内核直接通知用户线程可以进行后续操作了

相比于IO多路复用模型,异步IO并不十分常用,不少高性能并发服务程序使用IO多路复用

模型+多线程任务处理的架构基本可以满足需求。目前操作系统对异步IO的支持并非特别完

善,更多的是采用IO多路复用模型模拟异步IO的方式(IO事件触发时不直接通知用户线程,

而是将数据读写完毕后放到用户指定的缓冲区中)



I/O模型的具体实现


主要实现方式有以下几种:

Select:Linux实现对应,I/O复用模型,

BSD4.2最早实现,POSIX标准,一般操作系统均有实现

Poll:Linux实现,对应I/O复用模型,System V unix最早实现

Epoll:Linux特有,对应I/O复用模型,具有信号驱动I/O模型的某些特性

Kqueue:FreeBSD实现,对应I/O复用模型,具有信号驱动I/O模型某些特性

/dev/poll:SUN的Solaris实现,对应I/O复用模型,具有信号驱动I/O模型的某些特性

Iocp Windows实现,对应第5种(异步I/O)模型



select/poll/epoll



Select:POSIX所规定,目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优

点,本质上是通过设置或者检查存放fd标志位的数据结构来进行下一步处理

缺点

单个进程能够监视的文件描述符的数量存在最大限制,在Linux上一般为1024,

可以通过修改宏定义FD_SETSIZE,再重新编译内核实现,但是这样也会造成效率的降低

单个进程可监视的fd数量被限制,默认是1024,修改此值需要重新编译内核

对socket是线性扫描,即采用轮询的方法,效率较低

select 采取了内存拷贝方法来实现内核将 FD 消息通知给用户空间,这样一个用

来存放大量fd的数据结构,这样会使得用户空间和内核空间在传递该结构时复制开销大



poll

本质上和select没有区别,它将用户传入的数组拷贝到内核空间,然后查询每个fd对应的

设备状态

其没有最大连接数的限制,原因是它是基于链表来存储的

大量的fd的数组被整体复制于用户态和内核地址空间之间,而不管这样的复制是不是有意义

poll特点是“水平触发”,如果报告了fd后,没有被处理,那么下次poll时会再次报告该fd

边缘触发:只通知一次



epoll:在Linux 2.6内核中提出的select和poll的增强版本

支持水平触发LT和边缘触发ET,最大的特点在于边缘触发,它只告诉进程哪些fd刚刚变为

就需态,并且只会通知一次

使用“事件”的就绪通知方式,通过epoll_ctl注册fd,一旦该fd就绪,内核就会采用类似

callback的回调机制来激活该fd,epoll_wait便可以收到通知

优点:

没有最大并发连接的限制:能打开的FD的上限远大于1024(1G的内存能监听约10万个

端口),具体查看/proc/sys/fs/file-max,此值和系统内存大小相关

效率提升:非轮询的方式,不会随着FD数目的增加而效率下降;只有活跃可用的FD才

会调用callback函数,即epoll最大的优点就在于它只管理“活跃”的连接,而跟连接

总数无关

内存拷贝,利用mmap(Memory Mapping)

加速与内核空间的消息传递;即epoll使用mmap减少复制开销



Nginx介绍

Nginx:engine X ,2002年,开源,商业版

NGINX是免费,开源,高性能的HTTP和反向代理服务器,邮件代理服务器,通用

TCP/UDP代理服务器

解决C10K问题(10K Connections)

官网:http://nginx.org

二次开发版:

Tengine

OpenResty(章亦春)


特性:

模块化设计,较好的扩展性

高可靠性

支持热部署:不停机更新配置文件,升级版本,更换日志文件

低内存消耗:10000个keep-alive连接模式下的非活动连接,仅需2.5M内存

event-driven,aio, mmap,sendfile

基本功能:

静态资源的web服务器

http协议反向代理服务器

pop3/imap4协议反向代理服务器

FastCGI(LNMP),uWSGI(python)等协议

模块化(非DSO),如zip,SSL模块



nginx的程序架构

web服务相关的功能:

虚拟主机(server)

支持 keep-alive 和管道连接

访问日志(支持基于日志缓冲提高其性能)

url rewirte

路径别名

基于IP及用户的访问控制

支持速率限制及并发数限制

重新配置和在线升级而无须中断客户的工作进程

Memcached 的 GET 接口


master/worker结构

一个master进程:

负载加载和分析配置文件、管理worker进程、平滑升级

一个或多个worker进程

处理并响应用户请求

缓存相关的进程:

cache loader:载入缓存对象

cache manager:管理缓存对象



nginx模块


nginx高度模块化,但其模块早期不支持DSO机制;1.9.11版本支持动态装载和卸载

模块分类:

核心模块:core module

标准模块:

HTTP 模块: ngx_http_*

HTTP Core modules 默认功能

HTTP Optional modules 需编译时指定

Mail 模块 ngx_mail_*

Stream 模块 ngx_stream_*

第三方模块



核心模块:是 Nginx 服务器正常运行 必不可少 的模块,提供 错误日志记录 、 配置文

件解析 、 事件驱动机制 、 进程管理 等核心功能

标准HTTP模块:提供 HTTP 协议解析相关的功能,比如: 端口配置 、 网页编码设置 、

HTTP响应头设置 等等

可选HTTP模块:主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,

比如: Flash 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等

邮件服务模块:主要用于支持 Nginx 的 邮件服务 ,包括对 POP3 协议、 IMAP 协议和

SMTP协议的支持

第三方模块:是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如: Json 支持、

Lua 支持等



nginx的功用


静态的web资源服务器

html,图片,js,css,txt等静态资源

结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求

http/https协议的反向代理

imap4/pop3协议的反向代理

tcp/udp协议的请求转发(反向代理)



nginx目录结构和命令


ls /usr/local/nginx/

html是测试页,sbin是主程序

ls /usr/local/nginx/sbin/

nginx 只有一个程序文件

ls /usr/local/nginx/html/

50x.html index.html 测试网页

Nginx:默认为启动nginx

-h 查看帮助选项

-V 查看版本和配置选项

-t 测试nginx语法错误

-c filename 指定配置文件(default: /etc/nginx/nginx.conf)

-s signal 发送信号给master进程,signal:stop, quit, reopen, reload

示例: nginx -s stop 停止nginx

nginx -s reload 加载配置文件

-g directives 在命令行中指明全局指令



nginx配置


配置文件的组成部分:

主配置文件:nginx.conf

子配置文件 include conf.d/*.conf

fastcgi, uwsgi,scgi等协议相关的配置文件

mime.types:支持的mime类型

主配置文件的配置指令:

directive value [value2 ...];

注意:

(1) 指令必须以分号结尾

(2) 支持使用配置变量

内建变量:由Nginx模块引入,可直接引用

自定义变量:由用户使用set命令定义

set variable_name value;

引用变量:$variable_name


主配置文件结构:四部

main block:主配置段,即全局配置段,对http,mail都有效

event {

...

} 事件驱动相关的配置

http {

...

} http/https 协议相关配置段

mail {

...

} mail 协议相关配置段

stream {

...

} stream 服务器相关配置段



http协议相关的配置结构

http {

...

... 各server的公共配置

server { 每个server用于定义一个虚拟主机

...

}

server {

...

server_name 虚拟主机名

root 主目录

alias 路径别名

location [OPERATOR] URL { 指定URL的特性

...

if CONDITION {

...

}

}

}

}


Main 全局配置段常见的配置指令分类

正常运行必备的配置

优化性能相关的配置

用于调试及定位问题相关的配置

事件驱动相关的配置

帮助文档

http://nginx.org/en/docs/



正常运行必备的配置

1、user

指定worker进程的运行身份,如组不指定,默认和用户名同名

Syntax: user user [group];

Default: user nobody nobody;

Context: main

2、pid /PATH/TO/PID_FILE;

指定存储nginx主进程PID的文件路径

3、include file | mask;

指明包含进来的其它配置文件片断

4、load_module file ;

模块加载配置文件: /usr/share/nginx/modules/*.conf

指明要装载的动态模块路径: /usr/lib64/nginx/modules



性能优化相关的配置:

1、worker_processes number | auto;

worker进程的数量;通常应该为当前主机的cpu的物理核心数

2、worker_cpu_affinity cpumask ...;

worker_cpu_affinity auto [cpumask] 提高缓存命中率

CPU MASK: 00000001:0号CPU

00000010:1号CPU

10000000:8号CPU

worker_cpu_affinity 0001 0010 0100 1000;

worker_cpu_affinity 0101 1010;

3、worker_priority number;

指定worker进程的nice值,设定worker进程优先级:[-20,20]

4、worker_rlimit_nofile number;

worker进程所能够打开的文件数量上限,如65535


事件驱动相关的配置:

events {

...

}

1、worker_connections number;

每个worker进程所能够打开的最大并发连接数数量,如10240

总最大并发数:worker_processes * worker_connections

2、use method;

指明并发连接请求的处理方法 ,默认自动选择最优方法

示例:use epoll;

3、accept_mutex on | off;

处理新的连接请求的方法;on指由各个worker轮流处理新请求,Off指每个新请求

的到达都会通知(唤醒)所有的worker进程,但只有一个进程可获得连接造成“惊群”,

影响性能



调试和定位问题

1、daemon on|off;

是否以守护进程方式运行nignx,默认是守护进程方式

2、master_process on|off;

是否以master/worker模型运行nginx;默认为on,off 将不启动worker

3、error_log file [level] ;

错误日志文件及其级别;出于调试需要,可设定为debug;但debug仅在编译时使

用了“--with-debug”选项时才有效

/path/logfile: 记录到文件中

stderr: 发送到标准错误

syslog:server-address[,parameter=values] 发送到syslog

memory:size 内存

level:debug|info|notice|warn|error|crit|alter|emerg 日志级别

 

1、server { ... }

配置一个虚拟主机

server {

listen address[:PORT]|PORT;

server_name SERVER_NAME;

root /PATH/TO/DOCUMENT_ROOT;

}


2、listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE

listen address[:port] [default_server] [ssl] [http2 | spdy] 

[backlog=number] [rcvbuf=size] [sndbuf=size];

default_server 设定为默认虚拟主机

ssl 限制仅能够通过ssl连接提供服务

backlog=number 超过并发连接数后,新请求进入后援队列的长度

rcvbuf=size 接收缓冲区大小

sndbuf=size 发送缓冲区大小

注意:

(1) 基于port;

listen PORT; 指令监听在不同的端口

(2) 基于ip的虚拟主机

listen IP:PORT; IP 地址不同

(3) 基于hostname

server_name fqdn; 指令指向不同的主机名


3、server_name name ...;

虚拟主机的主机名称后可跟多个由空白字符分隔的字符串

支持*通配任意长度的任意字符

server_name *.winthcloud.com www.winthcloud.*

支持~起始的字符做正则表达式模式匹配,性能原因慎用

server_name ~^www\d+\.winthcloud\.com$

说明: \d 表示 [0-9]

匹配优先级机制从高到低

(1) 首先是字符串精确匹配 如:www.winthcloud.com

(2) 左侧*通配符 如:*.winthcloud.com

(3) 右侧*通配符 如:www.winthcloud.*

(4) 正则表达式 如: ~^.*\.winthcloud\.com$

(5) default_server


4、tcp_nodelay on | off;

在keepalived模式下的连接是否启用TCP_NODELAY选项

当为off时,延迟发送,合并多个请求后再发送

默认On时,不延迟发送

可用于:http, server, location

5、sendfile on | off;

是否启用sendfile功能,在内核中封装报文直接发送,默认Off

6、server_tokens on | off | build | string

是否在响应报文的Server首部显示nginx版本


定义路径相关的配置

7、root

设置web资源的路径映射;用于指明请求的URL所对应的文档的目录路径,

可用于http, server, location, if in location

server {

...

root /data/www/vhost1;

}

示例

http://www.winthcloud.com/images/logo.jpg

--> /data/www/vhosts/images/logo.jpg


8、location [ = | ~ | ~* | ^~ ] uri { ... }

location @name { ... }

在一个server中location配置段可存在多个,用于实现从uri到文件系统的路

径映射;ngnix会根据用户请求的URI来检查定义的所有location,并找出一个

最佳匹配,而后应用其配置

示例:

server {...

server_name www.winthcloud.com;

location /images/ {

root /data/imgs/;

}

}

http://www.winthcloud.com/images/logo.jpg

--> /data/imgs/images/logo.jpg


出现多个时其匹配顺序

= 对URI做精确匹配;

location = / {

...

}

http://www.winthcloud.com/ 匹配

http://www.winthcloud.com/index.html 不匹配

^~ 对URI的最左边部分做匹配检查,不区分字符大小写

~  对URI做正则表达式模式匹配,区分字符大小写

~* 对URI做正则表达式模式匹配,不区分字符大小写

不带符号 匹配起始于此uri的所有的uri

匹配优先级从高到低:

=, ^~, ~/~*, 不带符号


9、alias path;

路径别名,文档映射的另一种机制;仅能用于location上下文

示例:

http://www.winthcloud.com/bbs/index.html

location /bbs {

alias /web/forum/;

} --> /web/forum/index.html 注意: /bbs 后建议不要加 /

location /bbs/ {

root /web/forum/;

} --> /web/forum/bbs/index.html

注意:location中使用root指令和alias指令的意义不同

(a) root,给定的路径对应于location中的/uri 左侧的/

(b) alias,给定的路径对应于location中的/uri 的完整路径

10、index file ...;

指定默认网页文件,此指令由ngx_http_index_module模块提供


11、error_page code ... [=[response]] uri;

模块:ngx_http_core_module

定义错误页,以指定的响应状态码进行响应

可用位置:http, server, location, if in location

error_page 404 /404.html

error_page 404 =200 /404.html

error_page 404 =302 /index.html


12、try_files file ... uri;

try_files file ... =code;

按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文

件夹),如果所有文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。

只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。最

后一个参数是回退URI且必须存在,否则会出现内部500错误

location /images/ {

try_files $uri /images/default.gif;

} 说明:/images/default.gif是URI

location / {

try_files $uri $uri/index.html $uri.html =404;

}



定义客户端请求的相关配置

13、keepalive_timeout timeout [header_timeout];

设定保持连接超时时长,0表示禁止长连接,默认为75s

14、keepalive_requests number;

在一次长连接上所允许请求的资源的最大数量,默认为100

15、keepalive_disable none | browser ...;

对哪种浏览器禁用长连接

16、send_timeout time;

向客户端发送响应报文的超时时长,此处是指两次写操作之间的间隔时长,而非整个

响应过程的传输时长


17、client_body_buffer_size size;

用于接收每个客户端请求报文的body部分的缓冲区大小;默认为16k;超出此大小时,

其将被暂存到磁盘上的由下面client_body_temp_path指令所定义的位置

18、client_body_temp_path path [level1 [level2 [level3]]];

设定存储客户端请求报文的body部分的临时存储路径及子目录结构和数量

目录名为16进制的数字;

client_body_temp_path /var/tmp/client_body 1 2 2

1 1级目录占1位16进制,即2^4=16个目录 0-f

2 2级目录占2位16进制,即2^8=256个目录 00-ff

2 3级目录占2位16进制,即2^8=256个目录 00-ff


对客户端进行限制的相关配置

19、limit_rate rate;

限制响应给客户端的传输速率,单位是bytes/second

默认值0表示无限制

20、limit_except method ... { ... },仅用于location

限制客户端使用除了指定的请求方法之外的其它方法

method:GET, HEAD, POST, PUT, DELETE,MKCOL, COPY, MOVE, OPTIONS,

PROPFIND, PROPPATCH, LOCK, UNLOCK, PATCH

limit_except GET {

allow 192.168.1.0/24;

deny all;

}

除了GET和HEAD 之外其它方法仅允许192.168.1.0/24网段主机使用


文件操作优化的配置

21、aio on | off | threads[=pool];

是否启用aio功能 asynchronous I/O

22、directio size | off;

当文件大于等于给定大小时,例如directio 4m,同步(直接)写磁盘,而非写缓存

23、open_file_cache off;

open_file_cache max=N [inactive=time];

nginx可以缓存以下三种信息:

(1) 文件元数据:文件的描述符、文件大小和最近一次的修改时间

(2) 打开的目录结构

(3) 没有找到的或者没有权限访问的文件的相关信息

max=N:可缓存的缓存项上限;达到上限后会使用LRU算法实现管理

inactive=time:缓存项的非活动时长,在此处指定的时长内未被命中的或命中

的次数少于open_file_cache_min_uses指令所指定的次数的缓存项即为非活动项,

将被删除


24、open_file_cache_errors on | off;

是否缓存查找时发生错误的文件一类的信息

默认值为off


25、open_file_cache_min_uses number;

open_file_cache指令的inactive参数指定的时长内,至少被命中此处指定的次数

方可被归类为活动项

默认值为1

26、open_file_cache_valid time;

缓存项有效性的检查频率

默认值为60s