nginx http core module

nginx http core module

absolute_redirect

Syntax:     absolute_redirect on | off;
Default:    

absolute_redirect on;

Context:    http, server, location

This directive appeared in version 1.11.8. 

如果禁用该项,Nginx的反向代理连接将会是相对定位的。

aio

Syntax:     aio on | off | threads[=pool];
Default:    

aio off;

Context:    http, server, location

This directive appeared in version 0.8.11. 

使用于Linux或FreeBSD系统上,标识是否允许或禁止异步IO

location /video/ {
    aio            on;
    output_buffers 1 64k;
}

在FreeBSD系统上,AIO特性起用于FreeBSD 4.3版本,到FreeBSD 11.0,AIO也可以静态链接到内核中,如:

options VFS_AIO

或动态加载到内核中,如:

kldload aio

在Linux上,AIO起用于Linux 2.6.22,有必要开启 directio ,否则将会阻塞读。

location /video/ {
    aio            on;
    directio       512;
    output_buffers 1 128k;
}

在Linux上,directio 仅用于读对齐边界的512字节(XFS是4K)的块,未对齐边界的文件读取时使用阻塞模式。也就是大小切分且整好的块,就直接读取了,如果不是切分好的整好大小的块,AIO读取的时候,将会发生阻塞。
这同样适用于不是从文件头部开始字节范围请求和FLV请求,断点下载等情况,就是从起点字节到结束字节请求,起点字节不是文件开头处,结束字节不是文件末尾,说白了就是取文件中指定起止字节的一段内容:不是字节对齐的时候,会阻塞读取。

当在Linux上同时设置了 aiosendfile 时,AIO用于文件大小大于或等于 directio 指定定的文件, sendfile 用于小文件或 directio 被禁用的时候。

location /video/ {
    sendfile       on;  //小于8M的文件,使用sendfile
    aio            on;  //大于等于8M的文件,使用aio
    directio       8m;
}

最后,文件可以用多线程来读和 send ,而不用阻塞 worker 进程。

location /video/ {
    sendfile       on;
    aio            threads;
}

读和 send 文件操作的线程来自于线程池中,如果线程池的名称未设置,则线程池名称默认为 default ,线程池名称也可以使用变量来设置

aio threads=pool$disk;

默认情况下,多线程是禁用的,可以使用 --with-threads 编译参数来编译启用,目前多线程仅兼容 epollkqueueeventport 方法。多线程send file仅在Linxu上支持,这也解释了为什么默认是不开启多线程的,因为有诸多的限制条件,默认开启的都是满足几乎所有系统的。
其他的参看 sendfile 指令。

aio_write

Syntax:     aio_write on | off;
Default:    

aio_write off;

Context:    http, server, location

This directive appeared in version 1.9.13. 

你可能感兴趣的:(nginx http core module)