Nginx中文文档-ngx_http_core_module(D-H)

本文档包含以下指令:default_type、directio、directio_alignment、disable_symlinks、error_page、etag、http

default_type

语法:default_type mime-type;
默认:default_type text/plain;
上下文:http, server, location

定义了响应的默认MIME类型。文件扩展名与MIME类型的对应关系可以在types指令中设置。

directio

语法:directio size | off;
默认:directio off;
上下文:http, server, location
版本:0.7.7+

启用O_DIRECT标识(FreeBSD、Linux系统)、F_NOCACHE标识(Mac OS X系统)或directio函数(Solaris),当读取的文件大小大于或等于指定的大小时生效。该指令自动禁用sendfile的请求(0.7.15版本起)。对于大文件服务十分有效:
directio 4m;
也可以用于在Linux使用aio。

directio_alignment

语法:directio_alignment size;
默认:directio_alignment 512;
上下文:http, server, location
版本:0.8.11+

为directio设置对齐大小。大多数情况下,512字节的对其已足够。但是,当Linux系统使用XFS文件系统时,这个值应该增加到4K。

disable_symlinks

语法:disable_symlinks off;
      disable_symlinks on | if_not_owner [from=part];
默认:disable_symlinks off;
上下文:http, server, location
版本:1.1.15+

定义打开文件时如何处理文件的符号连接:
off
路径中存在符号连接是可以的,不会去检查。这是默认的行为。
on
如果路径中有任何符号连接,文件访问会被拒绝。
if_not_owner
如果访问的文件的符号连接和文件不是同一个属主,文件访问会被拒绝。
from=part
检查符号连接时(参数on和if_not_owner),路径的所有部分都是按正常规则检测的。检测符号连接会避免指定附加的from=part参数开头的路径。这种情况下,只会检查以参数指定开头的路径。如果值不是路径的开头,会检测全部的路径。如果值匹配完整文件名,则符号连接不会检测。参数可以包含变量。
例子:
disable_symlinks on from=$document_root;
指令只会在有openat()和fstatat()接口的系统上可用。这些系统包括高版本的FreeBSD、Linux和Solaris。
参数on和if_not_owner增加程序开销。
在不支持的系统上,只会查询阅读权限。
目前,ngx_http_autoindex_module, ngx_http_random_index_module, 和 ngx_http_dav_module模块忽略这个指令。

error_page

语法:error_page code … [=[response]] uri;
默认:–
上下文:http, server, location, if in location

为指定的错误定义显示的URI。error_page指令在当前等级上如果没有定义会继承自上一级。URI可以包含变量。
例子:

error_page 404             /404.html;
error_page 500 502 503 504 /50x.html;

同时,还可以将返回码改变,通过=response语法,例如:
error_page 404 =200 /empty.gif;
如果错误响应被代理服务器或FastCGI、uwsgi、SCGI服务处理,服务器可能会返回不同的返回码(如200、302、401或404),可以通过下面方式响应返回的状态码:
error_page 404 = /404.php;
也可以用重定向来处理错误:

error_page 403      http://example.com/forbidden.html;
error_page 404 =301 http://example.com/notfound.html;

默认情况下,会返回302状态码。这只能改成一种重定向返回码(301、302、303或307)。
如果内部重定向过程中不需要改变URI,可以将错误传给一个location中:

location / {
    error_page 404 = @fallback;
}

location @fallback {
    proxy_pass http://backend;
}

如果url处理过程中出现了错误,将会返回给客户端最后一次的错误码。

etag

语法:etag on | off;
默认:etag on;
上下文:http, server, location
版本:1.3.3+

为静态文件启用/禁用自动生成ETag返回头功能。

http

语法:http{…}
默认:–
上下文:main

为HTTP服务器指令提供配置文件上下文。

Nginx中文文档-ngx_http_core_module(A-C)

本文档包含以下指令:aio、aio_write、alias、chunked_transfer_encoding、client_body_buffer_size、client_body_in_file_only、client_body_in_single_buffer、client_body_temp_path、client_body_timeout、client_header_buffer_size、client_header_timeout、client_max_body_size、connection_pool_size

aio

语法:aio on | off | threads [=pool];
默认:aio off;
上下文:http, server, location
版本:0.8.11+

FreeBSD和Linux系统上开启/关闭异步文件io:

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

在FreeBSD上,AIO从FreeBSD 4.3起开始支持。AIO可以静态的链接到内核中:
options VFS_AIO
或作为加载为内核可加载模块:
kldload aio
在Linux上,AIO从2.6.22内核版本起开始支持。需要同时启用directio,否则读取仍是阻塞的:

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

在Linux上,directio只能用于读取512字节边界对齐的块(如果是XFS文件系统则是4K)。文件的末尾未对齐会使用阻塞模式进行读取。同样,对于字节范围的请求和不是从文件开始的FLV请求在开头和结尾未对齐的数据,读取也是阻塞的。
在Linux上,当AIO和sendfile同时启用时,AIO会作用于文件大于或等于那些在directio指令中指定的大小,而sendfile会作用于小于directio中指定大小的文件或directio是禁用时。

location /video/ {
    sendfile       on;
    aio            on;
    directio       8m;
}

最后,文件可以使用多线程进行读取和发送(1.7.11版起),不会阻塞工作进程。

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

读取和发送文件操作将在指定的线程池中执行。如果忽略了线程池名称,则使用默认的“default”作为名称,名称可以使用变量定义:
aio threads=pool$disk
默认情况下,多线程是禁用的,需要通过–with-threads配置参数启用。目前,多线程只适用于epoll、kqueue和eventport方法。多线程发送文件只在Linux上支持。
参见sendfile指令。

aio_write

语法:aio_write on | off
默认:aio_write off
上下文:http, server, location
版本:1.9.13+

如果开启了aio指令,该指令指定了是否使用它进行写文件操作。目前,只有在使用aio线程并且是写的是从被代理的服务器上收到的数据的临时文件时,该功能可用。

alias

语法:alias path
默认:–
上下文:location

为指定的location定义一个替代写法。例如,有如下配置:

location /i/ {
    alias /data/w3/images/;
}

在请求“/i/top.gif”时,将会响应/data/w3/images/top.gif文件。
path的值可以包含变量(除了$document_root和$realpath_root)。
如果alias用在一个正则表达式定义的location中,则这个正则表达式需要有捕获,且alias必须要提到这个捕获,例如:

location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ {
    alias /data/w3/images/$1;
}

当location匹配了alias指令的最后一部分时,最好用root替换,例如
不好的写法

location /images/ {
    alias /data/w3/images/;
}

建议的写法

location /images/ {
    root /data/w3;
}

chunked_transfer_encoding

语法:chunked_transfer_encoding on | off;
默认:chunked_transfer_encoding on;
上下文:http, server, location

允许禁用HTTP1.1的chunked编码传输。它会在软件不能支持chunked编码时起到作用,虽然标准中是需要支持的。

client_body_buffer_size

语法:client_body_buffer_size size;
默认:client_body_buffer_size 8k|16k;
上下文:http, server, location

设置读取客户端请求体的缓冲区大小。如果请求体超出缓冲区大小,整个请求或请求的一部分会被写入到临时文件中。默认情况下,缓冲区大小等于两页内存大小。32位平台和x86-64平台上是8k,其他64位平台上是16k。

client_body_in_file_only

语法:client_body_in_file_only on | clean | off;
默认:client_body_in_file_only off;
上下文:http, server, location

决定nginx是否将整个请求内容保存到文件中。这个指令可以在调试期间或当使用了$request_body_file变量或ngx_http_perl_module模块的$r->request_body_file方法时使用。
当这个值为on时,临时文件不会在请求结束后自动删除。
值为clear是,临时文件会在请求处理后删除。

client_body_in_single_buffer

语法:client_body_in_single_buffer on | off;
默认:client_body_in_single_buffer off;
上下文:http, server, location

该指令定义了nginx是否需要将整个请求保存在单个的缓冲区中。建议在使用$request_body变量时开启,这样可以保存相关复制操作数。

client_body_temp_path

语法:client_body_temp_path path [level1 [level2 [level3]]];
默认:client_body_temp_path client_body_temp;
上下文:http, server, location

指定一个存放请求的临时目录。最多可以用指定目录的3级子目录。例如,在下面的配置中:
client_body_temp_path /spool/nginx/client_temp 1 2;#1为第一级的位数,2为第二级的位数
一个临时文件可能是这样:
/spool/nginx/client_temp/7/45/00000123457

client_body_timeout

语法:client_body_timeout time;
默认:client_body_timeout 60s;
上下文:http, server, location

定义读取客户端请求的超时时间。超时时间只是针对两次连续读操作的时间,并不是整个传输请求的时间。如果客户端在这期间没有传任何数据,则会返回408错误码(请求超时)。

client_header_buffer_size

语法:client_header_buffer_size size;
默认:client_header_buffer_size 1k;
上下文:http, server

设置读取客户端请求头的缓冲区大小。大多数请求1K是够用了。但是,如果请求有很长的cookies或来自一个WAP客户端,1K的大小就不合适了。如果请求头大小超过缓冲区,会分配large_client_header_buffers指令中定义的大小。

client_header_timeout

语法:client_header_timeout time;
默认:client_header_timeout 60s;
上下文:http, server

定义读取客户端请求头的超时时间。如果客户端在此时间内没有发送全部请求头,会返回408状态码。

client_max_body_size

语法:client_max_body_size size;
默认:client_max_body_size 1m;
上下文:http, server, location

定义允许的最大请求体大小,这个大小是在请求头Content-Length中定义的。如果请求超过了设置的值,会返回413错误码。请注意,浏览器不会正确的显示这个错误。将size设置为0,可以禁止检查请求体的大小。

connection_pool_size

语法:connection_pool_size size;
默认:connection_pool_size 256|512;
上下文:http, server

允许精确的控制每一个连接的内存分配。这个指令对性能影响很小,不要广泛的使用。默认情况下,在32位平台上该值为256字节,在64位平台上该值为512字节。
在1.9.8版本前,所有的平台中默认值都为256.