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上同时设置了 aio
和 sendfile
时,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
编译参数来编译启用,目前多线程仅兼容 epoll
、kqueue
、eventport
方法。多线程send file仅在Linxu上支持,这也解释了为什么默认是不开启多线程的,因为有诸多的限制条件,默认开启的都是满足几乎所有系统的。
其他的参看 sendfile
指令。
<h3 id="2"> aio_write </h3>
Syntax: aio_write on | off;
Default:
aio_write off;
Context: http, server, location
This directive appeared in version 1.9.13.