NGINX模块(二)
【Nginx标准HTTP模块】
一、HTTP核心模块
指令1:alias
语法:alias file-path|directory-path;
默认值:no
使用字段:location
说明:这个指令指定一个路径使用某个,注意它可能类似于root,但是document root没有改变,请求只是使用了别名目录的文件。
location /i/ {
alias /spool/w3/images/;
}
上个例子总,请求"/i/top.gif"将返回这个文件 "/spool/w3/images/top.gif"。当然也可以在别名目录字段中使用变量。
【注意】alias指令无法在location字段中使用正则表达式,除非你同时使用rewrite和root。
指令2:client_body_in_file_only
语法:client_body_in_file_only on|off
默认值:off
使用字段:http, server, location
说明:这个指令始终存储一个连接请求实体到一个文件即使它只有0字节。
注意:如果这个指令打开,那么一个连接请求完成后,所存储的文件并不会删除。这个指令可以用于debug调试和嵌入式Perl模块中的$r>request_body_file。
指令3:client_body_in_single_buffer
语法:client_body_in_single_buffer
默认值:off
使用字段:http, server, location
这个指令(0.7.58版本)指定将一个完整的连接请求放入缓冲区,当使用$request_body时推荐使用这个
指令以减少复制操作。
如果无法将一个请求放入单个缓冲区,将会被放入磁盘。
指令4:client_body_buffer_size
语法:client_body_buffer_size the_size
默认值:8k/16k
使用字段:http, server, location
说明:这个指令可以指定连接请求使用的缓冲区大小。如果连接请求超过缓存区指定的值,那么这些请求或部分请求将尝试写入一个临时文件。
默认值为两个内存分页大小值,根据平台的不同,它可能是8k或16k。
指令5:client_body_temp_path
语法:client_body_temp_path dir-path [ level1 [ level2 [ level3 ]
默认值:client_body_temp
使用字段:http, server, location
说明:这个指令指定连接请求试图写入文件的目录路径。可以指定三级目录结构,如:
client_body_temp_path /spool/nginx/client_temp 1 2;
那么它的目录结构可能是这样:/spool/nginx/client_temp/7/45/00000123457
指令6:client_body_timeout
语法:client_body_timeout time
默认值:60
使用字段:http, server, location
说明:这个指令指定一个请求读取超时时间。
这个选项仅设置与客户端与服务器建立连接过程中,如果连接超过这个时间而客户端没有任何响应,Nginx将返回一个"Request time out" (408)错误。
指令7:client_header_buffer_size
语法:client_header_buffer_size size
默认值:1k
使用字段:http, server
这个指令指定客户端请求的http头部缓冲区大小
绝大多数情况下一个头部请求的大小不会大于1k
不过如果有来自于wap客户端的较大的cookie它可能会大于1k,Nginx将分配给它一个更大的缓冲区,
这个值可以在large_client_header_buffers里面设置。
指令8:client_header_timeout
语法:client_header_timeout time
默认值:60
使用字段:http, server
说明:这个指令指定客户端请求的http头部超时时间。
这个选项仅设置与客户端与服务器建立连接并且读取http头的过程中,如果连接超过这个时间而客户端没有任何响应,
Nginx将返回一个"Request time out" (408)错误。
指令9:client_max_body_size
语法:client_max_body_size size
默认值:client_max_body_size 1m
使用字段:http, server, location
说明:这个指令指定允许客户端请求的最大的单个文件字节数,它出现在请求头部的Content-Length字段。
如果请求大于指定的值,客户端将收到一个"Request Entity Too Large" (413)错误。需要记住,浏览器并不知道怎样显示这个错误。
指令10:default_type
语法: default_type MIME-type
默认值:default_type text/plain
使用字段:http, server, location
说明:在基础MIME视图没有指定任何信息的情况下可以设置默认MIME类型。
参考types。
location = /proxy.pac {
default_type application/x-ns-proxy-autoconfig;
}
location = /wpad.dat {
rewrite . /proxy.pac;
default_type application/x-ns-proxy-autoconfig;
}
指令11:directio
语法:directio [size|off]
默认值:directio off
使用字段:http, server, location
说明:这个参数指定在读取文件大小大于指定值的文件时使用O_DIRECT(FreeBSD, Linux),F_NOCACHE(Mac OS X)或者调用directio()函数(Solaris),当一个请求用到这个参数时会关掉sendfile,通常这个参数用于大文件。
directio 4m;
指令12:error_page
语法:error_page code [ code... ] [ = | =answer-code ] uri | @named_location
默认值:no
使用字段:http, server, location, location 中的if字段
说明:这个参数可以为错误代码指定相应的错误页面
error_page 404 /404.html;
error_page 502 503 504 /50x.html;
error_page 403 http://example.com/forbidden.html;
error_page 404 = @fetch;
同样,你也可以修改返回的错误代码:
error_page 404 =200 /.empty.gif;
如果一个错误的响应经过代理或者FastCGI服务器,这个服务器将返回不同的响应码,如200, 302,401或404,那么可以指定响应码重定向:
error_page 404 = /404.php;
如果在重定向时不希望改变URI,可以将错误页面重定向到一个命名的location字段中:
location / (
error_page 404 = @fallback;
)
location @fallback (
proxy_pass http://backend;
)
指令13:if_modified_since
语法:if_modified_since [off|exact|before]
默认值:if_modified_since exact
使用字段:http, server, location
说明:这个参数(0.7.24)指定了如何将文件修改的时间与请求头中的"If-Modified-Since"时间相比较。
·off :不检查请求头中的"If-Modified-Since"
·exact:精确匹配
·before:文件修改时间应小于请求头中的"If-Modified-Since"时间。
指令14:index
语法:index file [file...]
默认值:index index.html
使用字段:http, server, location
说明:这个参数哪个(些)文件将被用于主页,可以在文件名中使用变量,一个包含绝对路径的文件可以把它放到末尾,例:
index index.$geo.html index.0.html /index.html;
如果你想自动生成一个目录下的文件列表的主页,可以用autoindex on指令。
指令15:internal
语法:internal
默认值:no
使用字段: location
说明:internal指令指定某个location只能被“内部的”请求调用,外部的调用请求会返回"Not found" (404)“内部的”是指下列类型:
·指令error_page重定向的请求。
·ngx_http_ssi_module模块中使用include virtual指令创建的某些子请求。
·ngx_http_rewrite_module模块中使用rewrite指令修改的请求。
一个防止错误页面被用户直接访问的例子:
error_page 404 /404.html;
location /404.html {
internal;
}
Nginx 0.7.x使用一种新的语法指定内部请求:@location 例:
location / {
root /var/www/html;
error_page 404 @40x;
}
location @40x {
root /var/www/errors/40x.html;
}
指令16:keepalive_timeout
语法:keepalive_timeout [ time ] [ time ]
默认值:keepalive_timeout 75
使用字段:http, server, location
说明:参数的第一个值指定了客户端与服务器长连接的超时时间,超过这个时间,服务器将关闭连接。
参数的第二个值(可选)指定了HTTP头中Keep-Alive: timeout=time的time值,这个值可以帮助一些
浏览器关闭连接,以便服务器不用重复关闭,如果不指定这个参数,nginx不会在http头中发送Keep-Alive信息。(但这并不是指怎样将一个连接“Keep-Alive”)参数的这两个值可以不相同.
下面列出了一些服务器如何处理包含Keep-Alive的头:
·MSIE和Opera将Keep-Alive: timeout=N头忽略。
·MSIE保持一个活动的连接60-65秒,然后发送一个TCP RST。
·Opera将一直保持一个连接处于活动状态。
·Mozilla将一个连接在timeout=N的基础上增加大约1-10秒。
·Konqueror保持一个连接大约N秒。
指令17:keepalive_requests
语法:keepalive_requests n
默认值:keepalive_requests 100
使用字段:http, server, location
说明:服务器保持长连接的请求数。
指令18:large_client_header_buffers
语法:large_client_header_buffers number size
默认值:large_client_header_buffers 4 4k/8k
使用字段:http, server
说明:指令指定客户端请求的一些比较大的头文件到缓冲区的最大值,如果一个请求的URI大小超过这个值,服务器将返回一个"Request URI too large" (414),同样,如果一个请求的头部字段大于这个值,服务器将返回"Bad request" (400)。缓冲区根据需求的不同是分开的。
默认一个缓冲区大小为操作系统中分页文件大小,通常是4k或8k,如果一个连接请求将状态转换为keep-alive,这个缓冲区将被释放。
指令19:limit_except
语法:limit_except methods {...}
默认值:no
使用字段:location
说明:可以比较容易得在location字段中做一些http动作的限制。
ngx_http_access_module和ngx_http_auth_basic_module模块有很强的访问控制功能。
limit_except GET {
allow 192.168.1.0/32;
deny all;
}
指令20:limit_rate
语法:limit_rate speed
默认值:no
使用字段:http, server, location, location中的if字段
说明:限制将应答包传送到客户端的速度,单位为字节/秒,限制仅对一个连接有效,即如果一个客户端
打开2个连接,则它的速度是这个值乘以二。
基于一些不同的状况,如果要在server字段来限制一些连接的速度,那么这个参数并不适用,
不过你可以选择设置$limit_rate变量的值来达到目的:
server {
if ($slow) {
set $limit_rate 4k;
}
}
指令21:limit_rate_after
语法:limit_rate_after time
默认值:limit_rate_after 1m
使用字段:http, server, location, location中的if字段
这个指令和上面的一起使用:
limit_rate_after 1m;
limit_rate 100k;
指令22:listen
语法:listen address:port [ default [ backlog=num | rcvbuf=size | sndbuf=size | accept_filter=filter | deferred |
bind | ssl ] ]
默认值:listen 80
使用字段:server
说明:listen指令指定了server{...}字段中可以被访问到的ip地址及端口号,可以只指定一个ip,一个端口,或者一个可解析的服务器名。
listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000;
ipv6地址格式(0.7.36)在一个方括号中指定:
listen [::]:8000;
listen [fe80::1];
当linux(相对于FreeBSD)绑定IPv6[::],那么它同样将绑定相应的IPv4地址,如果在一些非ipv6服务器上仍然这样设置,可能会绑定失败,当然你可以使用完整的地址来代替[::],也可以使用"defaultipv6only=on" 选项来制定这个listen字段仅绑定ipv6地址,注意这个选项仅对这行listen生效,而不影响server块中指定的其他listen字段。
listen [2a02:750:5::123]:80;
listen [::]:80 default ipv6only=on;
只有ip地址需要指定,端口默认为80。
如果指令有default参数,那么这个server块将是一个“地址:端口”对的默认服务器,这对于你想为那些不匹配server_name指令中的主机名指定默认server块的基于域名的虚拟主机非常有用,如果没有指令带有default参数,那么默认服务器将使用第一个出现“IP:端口”对的server块。
listen允许为系统调用的listen(2)和bind(2)传递一些其他的参数,这些参数必须用在default参数之后:
backlog=num -- 指定调用listen(2)时backlog的值,默认会被-1。
rcvbuf=size -- 为正在监听的端口指定SO_RCVBUF的值。
sndbuf=size -- 为正在监听的端口指定SO_SNDBUF的值。
accept_filter=filter -- 为accept-filter指定一个名称。
·仅用于FreeBSD,它可能有两个过滤器,dataready与httpready,仅在最终版本的FreeBSD(FreeBSD: 6.0, 5.4-STABLE与4.11-STABLE)上,为他们发送-HUP信号可能会改变accept-filter。deferred -- 在linux系统上延迟accept(2)并使用一个辅助的参数: TCP_DEFER_ACCEPT。
bind -- 指出必须使bind(2)分离构建。主要指这里的“地址:端口”对,实际上如果这些指令描述为监听同一个端口,但是每个不同的地址和每
条不同的指令均监听的是这个端口的所有地址,那么nginx只将bind(2)构建于*:port。这种情况下必须考虑并且确定哪个地址上有连接到达,完成系统调用getsockname()。但是如果使用了parameters backlog, rcvbuf,sndbuf, accept_filter或deferred这些参数,那么将总是将这个“地址:端口”对分离。ssl -- 这个参数(0.7.14)并不关联listen(2)和bind(2)系统调用。
·被指定这个参数的listen将被允许工作在SSL模式,这将允许服务器同时工作在HTTP和HTTPS两种协议下,例如:
listen 80;
listen 443 default ssl;
一个使用这些参数的完整例子:
listen 127.0.0.1 default accept_filter=dataready backlog=1024;
指令23:location
语法:location [=|~|~*|^~] /uri/ { ... }
默认值:no
使用字段:server
说明:这个参数根据URI的不同需求来进行配置,可以使用字符串与正则表达式匹配,如果要使用正则表达式,你必须指定下列前缀:
1、~* 不匹配大小写。
2、~ 匹配大小写。
要确定该指令匹配特定的查询,程序将首先对字符串进行匹配,字符串匹配将作为查询的开始并且区分其大小写,大部分指定的匹配都会被使用(下文将描述nginx如何完成这一决定)。然后,正则表达式的匹配查询开始,匹配查询的第一个正则表达式找到后会停止搜索,如果没有找到正则表达式,将使用字符串的搜索结果。有两种方式修改这种查询模式,一是使用前缀“=”,查询将被精确的匹配,如果有结果匹配,查
询将立即停止并且立即处理请求,例如:如果请求“/”非常频繁,可以使用"location = /"将迅速处理这些请求。
第二种方式为使用前缀“^~”这个前缀指定目录只有一个匹配结果的情况下nginx不检查正则表达式,例如:"location ^~ /images/"将在查询开始于/images/时停止搜索,所有的正则表达式不会被检查。
下面是各种查询方式的总结:
1、前缀“=”表示精确匹配查询,如果找到,立即停止查询。
2、指令仍然使用标准字符串,如果匹配使用“^~”前缀,停止查询。
3、正则表达式按照他们在配置文件中定义的顺序。
4、如果第三条产生一个匹配,这个匹配将被使用,否则将使用第二条的匹配。
例:
location = / {
# 只匹配 / 的查询.
[ configuration A ]
}
location / {
# 匹配任何以 / 开始的查询,但是正则表达式与一些较长的字符串将被首先匹配。
[ configuration B ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 开始的查询并且停止搜索,不检查正则表达式。
[ configuration C ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配任何以gif, jpg, or jpeg结尾的文件,但是所有 /images/ 目录的请求将在Configuration C中处理。
[ configuration D ]
}
各请求的处理如下例:
·/ -> configuration A
·/documents/document.html -> configuration B
·/images/1.gif -> configuration C
·/documents/1.jpg -> configuration D
注意你可以以任何顺序定义这4个配置并且匹配结果是相同的,但当使用嵌套的location结构时可能会将配置文件变的复杂并且产生一些比较意外的结果。
nginx如何决定哪个路径将被匹配?
大多数用户并不需要知道nginx内部如何确定使用哪一个路径,nginx会以很高效的方式为你的URI选择“最具体的”匹配,对于那些好奇者,可以阅读一下。所有的路径字符串按照字母顺序排列。nginx然后向下检查所有匹配并且直到找到一个比请求的URI更大的值,这个过程调用strcmp()函数,一旦strcmp()函数返回1,则停止搜索,一旦停止搜索,最后一个匹配的字符串将被使用。
例如我们有以下路径:
/
/a
/apple
/banana
我们现在请求服务器的"/az"路径,nginx将向下搜索路径目录,"/"首先被匹配,但是"/"比"/az"要小,所以继续向下搜索,"/a"同样被匹配,"/a"同样小于"/az","/apple"并不匹配,"/banana"要大于"/az",所以搜索停止,最后一个匹配"/a"将被使用。
命名的Lacations
较晚的版本(>0.7.x)支持命名location,这些location字段以@开头,以内部location的处理方式进行处理除了error_page或try_files指令
为了保持原始URI而指定的内部重定向。
location / {
try_files @joomla index.html;
}
location @joomla {
rewrite ^(.*)$ /index.php?q=$1 last;
}
指令24:log_not_found
语法:log_not_found [on|off]
默认值:log_not_found on
使用字段:http, server, location
说明:这个指令指定是否将一些文件没有找到的错误信息写入error_log指定的文件中。
指令25:log_subrequest
语法:log_subrequest [on|off]
默认值:log_subrequest off
使用字段:http, server, location
这个指令指定是否将一些经过rewrite rules和/或SSI requests的子请求请求写入access_log指定的文件
中。
指令26:msie_padding
语法:msie_padding [on|off]
默认值:msie_padding on
使用字段:http, server, location
这个指令指定开启或关闭MSIE浏览器的msie_padding功能,当这个功能开启,nginx将为响应实体分
配最小512字节,以便响应大于或等于400的状态代码。
这个空间预防MSIE浏览器激活“友好的”HTTP错误页面,所以不在服务器端隐藏更多的错误信息。
注意Chromium/Chrome拥有较好的HTTP错误页面,但是这个特征将不会发送某些错误信息。
指令27:msie_refresh
语法: msie_refresh [on|off]
默认值:msie_refresh off
使用字段:http, server, location
说明:这个指令允许或拒绝为MSIE发布一个refresh而不是做一次redirect
指令28:open_file_cache
语法:open_file_cache max = N [inactive = time] | off
默认值:open_file_cache off
使用字段:http, server, location
说明:这个指令指定缓存是否启用,如果启用,将记录文件以下信息:
·打开的文件描述符,大小信息和修改时间。
·存在的目录信息。
·在搜索文件过程中的错误信息 -- 没有这个文件、无法正确读取,参考open_file_cache_errors
指令参数:
·max - 指定缓存的最大数目,如果缓存溢出,最长使用过的文件(LRU)将被移除。
·inactive - 指定缓存文件被移除的时间,如果在这段时间内文件没被下载,默认为60秒。
·off - 禁止缓存。
例:
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
指令29:open_file_cache_errors
语法:open_file_cache_errors on | off
默认值:open_file_cache_errors off
使用字段:http, server, location
说明:这个指令指定是否在搜索一个文件是记录cache错误。
指令30:open_file_cache_min_uses
语法:open_file_cache_min_uses number
默认值:open_file_cache_min_uses 1
使用字段:http, server, location
这个指令指定了在open_file_cache指令无效的参数中一定的时间范围内可以使用的最小文件数,如
果使用更大的值,文件描述符在cache中总是打开状态。
指令31:open_file_cache_valid
语法:open_file_cache_valid time
默认值:open_file_cache_valid 60
使用字段:http, server, location
这个指令指定了何时需要检查open_file_cache中缓存项目的有效信息。
指令32:optimize_server_names
语法:optimize_server_names [ on|off ]
默认值:optimize_server_names on
使用字段:http, server
说明:这个指令指定是否在基于域名的虚拟主机中开启最优化的主机名检查。
尤其是检查影响到使用主机名的重定向,如果开启最优化,那么所有基于域名的虚拟主机监听的
一个“地址:端口对”具有相同的配置,这样在请求执行的时候并不进行再次检查,重定向会使
用第一个server name。
如果重定向必须使用主机名并且在客户端检查通过,那么这个参数必须设置为off。
注意:这个参数不建议在nginx 0.7.x版本中使用,请使用server_name_in_redirect。
指令33:port_in_redirect
语法:port_in_redirect [ on|off ]
默认值:port_in_redirect on
使用字段:http, server, location
说明:这个指令指定是否在让nginx在重定向操作中对端口进行操作。
如果这个选项打开,在重定向请求中nginx不会在url中添加端口。
指令34:recursive_error_pages
语法:recursive_error_pages [on|off]
默认值:recursive_error_pages off
使用字段:http, server, location
说明:recursive_error_pages指定启用除第一条error_page指令以外其他的error_page。
指令35:resolver
语法:resolver address
默认值:no
使用字段:http, server, location
指令36:resolver_timeout
语法:resolver_timeout time
默认值:30
使用字段:http, server, location
说明:解析超时时间。
指令37:root
语法:root path
默认值:root html
使用字段:http, server, location ,location中的if字段
说明:请求到达后的文件根目录。
下例中:
location /i/ {
root /spool/w3;
}
如果请求"/i/top.gif"文件,nginx将转到"/spool/w3/i/top.gif"文件。你可以在参数中使用变量。
注意:在请求中root会添加这个location到它的值后面,即"/i/top.gif"并不会请求"/spool/w3/top.gif"文
件,如果要实现上述类似于apache alias的功能,可以使用alias指令。
指令38:satisfy_any
语法:satisfy_any [ on|off ]
默认值:satisfy_any off
使用字段:location
说明:指令可以检查至少一个成功的密码效验,它在NginxHttpAccessModule或NginxHttpAuthBasicModule
这两个模块中执行。
location / {
satisfy_any on;
allow 192.168.1.0/32;
deny all;
auth_basic "closed site";
auth_basic_user_file conf/htpasswd;
}
指令39:send_timeout
语法:send_timeout the time
默认值:send_timeout 60
使用字段:http, server, location
指令指定了发送给客户端应答后的超时时间,Timeout是指没有进入完整established状态,只完成了
两次握手,如果超过这个时间客户端没有任何响应,nginx将关闭连接。
指令40:sendfile
语法:sendfile [ on|off ]
默认值:sendfile off
使用字段:http, server, location
说明:是否启用sendfile()函数。
指令41:server
语法:server {...}
默认值:no
使用字段:http
说明:server字段包含虚拟主机的配置。
没有明确的机制来分开基于域名(请求中的主机头)和基于IP的虚拟主机。
可以通过listen指令来指定必须连接到这个server块的所有地址和端口,并且在server_name指令中可
以指定所有的域名。
指令42:server_name
语法:server_name name [... ]
默认值:server_name hostname
使用字段:server
这个指令有两个作用:
·将HTTP请求的主机头与在nginx配置文件中的server{...}字段中指定的参数进行匹配,并且找出第
一个匹配结果。这就是如何定义虚拟主机的方法,域名遵循下述优先级规则:
1、完整匹配的名称。
2、名称开始于一个文件通配符:*.example.com。
3、名称结束于一个文件通配符:www.example.*。
4、使用正则表达式的名称。
如果没有匹配的结果,nginx配置文件将安装以下优先级使用[#server server { ... }]字段:
1、listen指令被标记为default的server字段。
2、第一个出现listen(或者默认的listen 80)的server字段。
·如果server_name_in_redirect被设置,这个指令将用于设置HTTP重定向的服务器名。
例:
server {
server_name example.com www.example.com;
}
第一个名称为服务器的基本名称,默认名称为机器的hostname。
当然,可以使用文件通配符:
server {
server_name example.com *.example.com www.example.*;
}
上述例子中的前两个名称可以合并为一个:
server {
server_name .example.com;
}
同样可以使用正则表达式。名称前面加“~”:
server {
server_name www.example.com ~^www\d+\.example\.com$;
}
如果客户端请求中没有主机头或者没有匹配server_name的主机头,服务器基本名称将被用于一个
HTTP重定向,你可以只使用“*”来强制nginx在HTTP重定向中使用Host头(注意*不能用于第一
个名称,不过你可以用一个很**的名称代替,如“_”)
server {
server_name example.com *;
}
server {
server_name _ *;
}
在nginx0.6.x中有稍许改变:
server {
server_name _;
}
0.7.12版本以后已经可以支持空服务器名,以处理那些没有主机头的请求:
server {
server_name "";
}
指令43:server_name_in_redirect
语法:server_name_in_redirect on|off
默认值:server_name_in_redirect on
使用字段:http, server, location
如果这个指令打开,nginx将使用server_name指定的基本服务器名作为重定向地址,如果关闭,
nginx将使用请求中的主机头。
指令44:server_names_hash_max_size
语法:server_names_hash_max_size number
默认值:server_names_hash_max_size 512
使用字段:http
服务器名称哈希表的最大值,更多信息请参考nginx Optimizations。
指令45:server_names_hash_bucket_size
语法:server_names_hash_bucket_size number
默认值:server_names_hash_bucket_size 32/64/128
使用字段:http
服务器名称哈希表每个页框的大小,这个指令的默认值依赖于cpu缓存。更多信息请参考nginx
Optimizations。
指令46:server_tokens
语法:server_tokens on|off
默认值:server_tokens on
使用字段:http, server, location
是否在错误页面和服务器头中输出nginx版本信息。
指令47:tcp_nodelay
语法:tcp_nodelay [on|off]
默认值:tcp_nodelay on
使用字段:http, server, location
这个指令指定是否使用socket的TCP_NODELAY选项,这个选项只对keep-alive连接有效。
点击这里了解更多关于TCP_NODELAY选项的信息。
指令48:tcp_nopush
语法:tcp_nopush [on|off]
默认值:tcp_nopush off
使用字段:http, server, location
这个指令指定是否使用socket的TCP_NOPUSH(FreeBSD)或TCP_CORK(linux)选项,这个选项
只在使用sendfile时有效。
设置这个选项的原因是nginx试图将它的HTTP应答头封装到一个包中。
指令49:try_files
语法:try_files file1 [file2 ... filen] fallback
默认值:none
使用字段:location
这个指令告诉nginx将测试参数中每个文件的存在,并且URI将使用第一个找到的文件,如果没有找
到文件,将请求名为fallback(可以使任何名称)的location字段,fallback是一个必须的参数,它可
以是一个命名的location或者可靠的URI。
例:
location / {
try_files index.html index.htm @fallback;
}
location @fallback {
root /var/www/error;
index index.html;
}
指令50:types
语法:types {...}
使用字段:http, server, location
这个字段指定一些扩展的文件对应方式与应答的MIME类型,一个MIME类型可以有一些与其类似的扩展。默认使用以下文件对应方式:
types {
text/html html;
image/gif gif;
image/jpeg jpg;
}
完整的对应视图文件为conf/mime.types,并且将被包含。
如果你想让某些特定的location的处理方式使用MIME类型:application/octet-stream,可以使用以下配置:
location /download/ {
types { }
default_type application/octet-stream;
}
变量
core module 支持一些内置的变量,与apache使用的变量相一致。
首先,一些变量是代表了客户端请求标题的字段,如:$http_user_agent, $http_cookie等等。
除此之外,下列是一些其他变量:
$arg_PARAMETER :这个变量包含在查询字符串时GET请求PARAMETER的值。
$args :这个变量等于请求行中的参数。
$binary_remote_addr :二进制码形式的客户端地址。
$body_bytes_sent :未知。
$content_length :请求头中的Content-length字段。
$content_type :请求头中的Content-Type字段。
$cookie_COOKIE :cookie COOKIE的值。
$document_root :当前请求在root指令中指定的值。
$document_uri :与$uri相同。
$host :请求中的主机头字段,如果请求中的主机头不可用,则为服务器处理请求的服务器名称。
$is_args :如果$args设置,值为"?",否则为""。
$limit_rate :这个变量可以限制连接速率。
$query_string :与$args相同。
$remote_addr :客户端的IP地址。
$remote_port :客户端的端口。
$remote_user :已经经过Auth Basic Module验证的用户名。
$request_filename :当前连接请求的文件路径,由root或alias指令与URI请求生成。
$request_body :这个变量(0.7.58+)包含请求的主要信息。在使用proxy_pass或fastcgi_pass指令的location中比较有意义。
$request_body_file :客户端请求主体信息的临时文件名。
$request_completion :未知。
$request_method :这个变量是客户端请求的动作,通常为GET或POST。包括0.8.20及之前的版本中,这个变量总为main request中的动作,如果当前请求是一个子请求,并不使用这个当前请求的动作。
$request_uri :完整初始化的URI及其一些参数。
$scheme :HTTP方法(如http,https)。按需使用,例:
rewrite ^(.+)$ $scheme://example.com$1 redirect;
$server_addr :服务器地址,在完成一次系统调用后可以确定这个值,如果要绕开系统调用,则必须在listen中指定地址并且使用bind参数。
$server_name:服务器名称。
$server_port :请求到达服务器的端口号。
$server_protocol :请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$uri :请求中的当前URI,可以不同于初始化的值,例如内部重定向,或者使用index指令中一些包含内部重定向的文件。
二、HTTP负载均衡模块
三、HTTP访问控制模块
四、HTTP基本认证模块
五、HTTP目录清单生成模块
六、浏览器相关模块
七、字符集设置模块
八、Empty GIF模块
九、FastCGI模块
十、Geo模块
十一、Gzip模块
十二、HTTP头处理模块
十三、默认主页设置模块
十四、HTTP Referer模块
十五、HTTP Limit zone模块
十六、HTTP Limit Requests模块
十七、日志模块
十八、Map模块
十九、Memcache模块
二十、HTTP代理模块
二十一、URL重写模块
二十二、SSI模块
二十三、User ID模块
一、HTTP核心模块
指令1:alias
语法:alias file-path|directory-path;
默认值:no
使用字段:location
说明:这个指令指定一个路径使用某个,注意它可能类似于root,但是document root没有改变,请求只是使用了别名目录的文件。
location /i/ {
alias /spool/w3/images/;
}
上个例子总,请求"/i/top.gif"将返回这个文件 "/spool/w3/images/top.gif"。当然也可以在别名目录字段中使用变量。
【注意】alias指令无法在location字段中使用正则表达式,除非你同时使用rewrite和root。
指令2:client_body_in_file_only
语法:client_body_in_file_only on|off
默认值:off
使用字段:http, server, location
说明:这个指令始终存储一个连接请求实体到一个文件即使它只有0字节。
注意:如果这个指令打开,那么一个连接请求完成后,所存储的文件并不会删除。这个指令可以用于debug调试和嵌入式Perl模块中的$r>request_body_file。
指令3:client_body_in_single_buffer
语法:client_body_in_single_buffer
默认值:off
使用字段:http, server, location
这个指令(0.7.58版本)指定将一个完整的连接请求放入缓冲区,当使用$request_body时推荐使用这个
指令以减少复制操作。
如果无法将一个请求放入单个缓冲区,将会被放入磁盘。
指令4:client_body_buffer_size
语法:client_body_buffer_size the_size
默认值:8k/16k
使用字段:http, server, location
说明:这个指令可以指定连接请求使用的缓冲区大小。如果连接请求超过缓存区指定的值,那么这些请求或部分请求将尝试写入一个临时文件。
默认值为两个内存分页大小值,根据平台的不同,它可能是8k或16k。
指令5:client_body_temp_path
语法:client_body_temp_path dir-path [ level1 [ level2 [ level3 ]
默认值:client_body_temp
使用字段:http, server, location
说明:这个指令指定连接请求试图写入文件的目录路径。可以指定三级目录结构,如:
client_body_temp_path /spool/nginx/client_temp 1 2;
那么它的目录结构可能是这样:/spool/nginx/client_temp/7/45/00000123457
指令6:client_body_timeout
语法:client_body_timeout time
默认值:60
使用字段:http, server, location
说明:这个指令指定一个请求读取超时时间。
这个选项仅设置与客户端与服务器建立连接过程中,如果连接超过这个时间而客户端没有任何响应,Nginx将返回一个"Request time out" (408)错误。
指令7:client_header_buffer_size
语法:client_header_buffer_size size
默认值:1k
使用字段:http, server
这个指令指定客户端请求的http头部缓冲区大小
绝大多数情况下一个头部请求的大小不会大于1k
不过如果有来自于wap客户端的较大的cookie它可能会大于1k,Nginx将分配给它一个更大的缓冲区,
这个值可以在large_client_header_buffers里面设置。
指令8:client_header_timeout
语法:client_header_timeout time
默认值:60
使用字段:http, server
说明:这个指令指定客户端请求的http头部超时时间。
这个选项仅设置与客户端与服务器建立连接并且读取http头的过程中,如果连接超过这个时间而客户端没有任何响应,
Nginx将返回一个"Request time out" (408)错误。
指令9:client_max_body_size
语法:client_max_body_size size
默认值:client_max_body_size 1m
使用字段:http, server, location
说明:这个指令指定允许客户端请求的最大的单个文件字节数,它出现在请求头部的Content-Length字段。
如果请求大于指定的值,客户端将收到一个"Request Entity Too Large" (413)错误。需要记住,浏览器并不知道怎样显示这个错误。
指令10:default_type
语法: default_type MIME-type
默认值:default_type text/plain
使用字段:http, server, location
说明:在基础MIME视图没有指定任何信息的情况下可以设置默认MIME类型。
参考types。
location = /proxy.pac {
default_type application/x-ns-proxy-autoconfig;
}
location = /wpad.dat {
rewrite . /proxy.pac;
default_type application/x-ns-proxy-autoconfig;
}
指令11:directio
语法:directio [size|off]
默认值:directio off
使用字段:http, server, location
说明:这个参数指定在读取文件大小大于指定值的文件时使用O_DIRECT(FreeBSD, Linux),F_NOCACHE(Mac OS X)或者调用directio()函数(Solaris),当一个请求用到这个参数时会关掉sendfile,通常这个参数用于大文件。
directio 4m;
指令12:error_page
语法:error_page code [ code... ] [ = | =answer-code ] uri | @named_location
默认值:no
使用字段:http, server, location, location 中的if字段
说明:这个参数可以为错误代码指定相应的错误页面
error_page 404 /404.html;
error_page 502 503 504 /50x.html;
error_page 403 http://example.com/forbidden.html;
error_page 404 = @fetch;
同样,你也可以修改返回的错误代码:
error_page 404 =200 /.empty.gif;
如果一个错误的响应经过代理或者FastCGI服务器,这个服务器将返回不同的响应码,如200, 302,401或404,那么可以指定响应码重定向:
error_page 404 = /404.php;
如果在重定向时不希望改变URI,可以将错误页面重定向到一个命名的location字段中:
location / (
error_page 404 = @fallback;
)
location @fallback (
proxy_pass http://backend;
)
指令13:if_modified_since
语法:if_modified_since [off|exact|before]
默认值:if_modified_since exact
使用字段:http, server, location
说明:这个参数(0.7.24)指定了如何将文件修改的时间与请求头中的"If-Modified-Since"时间相比较。
·off :不检查请求头中的"If-Modified-Since"
·exact:精确匹配
·before:文件修改时间应小于请求头中的"If-Modified-Since"时间。
指令14:index
语法:index file [file...]
默认值:index index.html
使用字段:http, server, location
说明:这个参数哪个(些)文件将被用于主页,可以在文件名中使用变量,一个包含绝对路径的文件可以把它放到末尾,例:
index index.$geo.html index.0.html /index.html;
如果你想自动生成一个目录下的文件列表的主页,可以用autoindex on指令。
指令15:internal
语法:internal
默认值:no
使用字段: location
说明:internal指令指定某个location只能被“内部的”请求调用,外部的调用请求会返回"Not found" (404)“内部的”是指下列类型:
·指令error_page重定向的请求。
·ngx_http_ssi_module模块中使用include virtual指令创建的某些子请求。
·ngx_http_rewrite_module模块中使用rewrite指令修改的请求。
一个防止错误页面被用户直接访问的例子:
error_page 404 /404.html;
location /404.html {
internal;
}
Nginx 0.7.x使用一种新的语法指定内部请求:@location 例:
location / {
root /var/www/html;
error_page 404 @40x;
}
location @40x {
root /var/www/errors/40x.html;
}
指令16:keepalive_timeout
语法:keepalive_timeout [ time ] [ time ]
默认值:keepalive_timeout 75
使用字段:http, server, location
说明:参数的第一个值指定了客户端与服务器长连接的超时时间,超过这个时间,服务器将关闭连接。
参数的第二个值(可选)指定了HTTP头中Keep-Alive: timeout=time的time值,这个值可以帮助一些
浏览器关闭连接,以便服务器不用重复关闭,如果不指定这个参数,nginx不会在http头中发送Keep-Alive信息。(但这并不是指怎样将一个连接“Keep-Alive”)参数的这两个值可以不相同.
下面列出了一些服务器如何处理包含Keep-Alive的头:
·MSIE和Opera将Keep-Alive: timeout=N头忽略。
·MSIE保持一个活动的连接60-65秒,然后发送一个TCP RST。
·Opera将一直保持一个连接处于活动状态。
·Mozilla将一个连接在timeout=N的基础上增加大约1-10秒。
·Konqueror保持一个连接大约N秒。
指令17:keepalive_requests
语法:keepalive_requests n
默认值:keepalive_requests 100
使用字段:http, server, location
说明:服务器保持长连接的请求数。
指令18:large_client_header_buffers
语法:large_client_header_buffers number size
默认值:large_client_header_buffers 4 4k/8k
使用字段:http, server
说明:指令指定客户端请求的一些比较大的头文件到缓冲区的最大值,如果一个请求的URI大小超过这个值,服务器将返回一个"Request URI too large" (414),同样,如果一个请求的头部字段大于这个值,服务器将返回"Bad request" (400)。缓冲区根据需求的不同是分开的。
默认一个缓冲区大小为操作系统中分页文件大小,通常是4k或8k,如果一个连接请求将状态转换为keep-alive,这个缓冲区将被释放。
指令19:limit_except
语法:limit_except methods {...}
默认值:no
使用字段:location
说明:可以比较容易得在location字段中做一些http动作的限制。
ngx_http_access_module和ngx_http_auth_basic_module模块有很强的访问控制功能。
limit_except GET {
allow 192.168.1.0/32;
deny all;
}
指令20:limit_rate
语法:limit_rate speed
默认值:no
使用字段:http, server, location, location中的if字段
说明:限制将应答包传送到客户端的速度,单位为字节/秒,限制仅对一个连接有效,即如果一个客户端
打开2个连接,则它的速度是这个值乘以二。
基于一些不同的状况,如果要在server字段来限制一些连接的速度,那么这个参数并不适用,
不过你可以选择设置$limit_rate变量的值来达到目的:
server {
if ($slow) {
set $limit_rate 4k;
}
}
指令21:limit_rate_after
语法:limit_rate_after time
默认值:limit_rate_after 1m
使用字段:http, server, location, location中的if字段
这个指令和上面的一起使用:
limit_rate_after 1m;
limit_rate 100k;
指令22:listen
语法:listen address:port [ default [ backlog=num | rcvbuf=size | sndbuf=size | accept_filter=filter | deferred |
bind | ssl ] ]
默认值:listen 80
使用字段:server
说明:listen指令指定了server{...}字段中可以被访问到的ip地址及端口号,可以只指定一个ip,一个端口,或者一个可解析的服务器名。
listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000;
ipv6地址格式(0.7.36)在一个方括号中指定:
listen [::]:8000;
listen [fe80::1];
当linux(相对于FreeBSD)绑定IPv6[::],那么它同样将绑定相应的IPv4地址,如果在一些非ipv6服务器上仍然这样设置,可能会绑定失败,当然你可以使用完整的地址来代替[::],也可以使用"defaultipv6only=on" 选项来制定这个listen字段仅绑定ipv6地址,注意这个选项仅对这行listen生效,而不影响server块中指定的其他listen字段。
listen [2a02:750:5::123]:80;
listen [::]:80 default ipv6only=on;
只有ip地址需要指定,端口默认为80。
如果指令有default参数,那么这个server块将是一个“地址:端口”对的默认服务器,这对于你想为那些不匹配server_name指令中的主机名指定默认server块的基于域名的虚拟主机非常有用,如果没有指令带有default参数,那么默认服务器将使用第一个出现“IP:端口”对的server块。
listen允许为系统调用的listen(2)和bind(2)传递一些其他的参数,这些参数必须用在default参数之后:
backlog=num -- 指定调用listen(2)时backlog的值,默认会被-1。
rcvbuf=size -- 为正在监听的端口指定SO_RCVBUF的值。
sndbuf=size -- 为正在监听的端口指定SO_SNDBUF的值。
accept_filter=filter -- 为accept-filter指定一个名称。
·仅用于FreeBSD,它可能有两个过滤器,dataready与httpready,仅在最终版本的FreeBSD(FreeBSD: 6.0, 5.4-STABLE与4.11-STABLE)上,为他们发送-HUP信号可能会改变accept-filter。deferred -- 在linux系统上延迟accept(2)并使用一个辅助的参数: TCP_DEFER_ACCEPT。
bind -- 指出必须使bind(2)分离构建。主要指这里的“地址:端口”对,实际上如果这些指令描述为监听同一个端口,但是每个不同的地址和每
条不同的指令均监听的是这个端口的所有地址,那么nginx只将bind(2)构建于*:port。这种情况下必须考虑并且确定哪个地址上有连接到达,完成系统调用getsockname()。但是如果使用了parameters backlog, rcvbuf,sndbuf, accept_filter或deferred这些参数,那么将总是将这个“地址:端口”对分离。ssl -- 这个参数(0.7.14)并不关联listen(2)和bind(2)系统调用。
·被指定这个参数的listen将被允许工作在SSL模式,这将允许服务器同时工作在HTTP和HTTPS两种协议下,例如:
listen 80;
listen 443 default ssl;
一个使用这些参数的完整例子:
listen 127.0.0.1 default accept_filter=dataready backlog=1024;
指令23:location
语法:location [=|~|~*|^~] /uri/ { ... }
默认值:no
使用字段:server
说明:这个参数根据URI的不同需求来进行配置,可以使用字符串与正则表达式匹配,如果要使用正则表达式,你必须指定下列前缀:
1、~* 不匹配大小写。
2、~ 匹配大小写。
要确定该指令匹配特定的查询,程序将首先对字符串进行匹配,字符串匹配将作为查询的开始并且区分其大小写,大部分指定的匹配都会被使用(下文将描述nginx如何完成这一决定)。然后,正则表达式的匹配查询开始,匹配查询的第一个正则表达式找到后会停止搜索,如果没有找到正则表达式,将使用字符串的搜索结果。有两种方式修改这种查询模式,一是使用前缀“=”,查询将被精确的匹配,如果有结果匹配,查
询将立即停止并且立即处理请求,例如:如果请求“/”非常频繁,可以使用"location = /"将迅速处理这些请求。
第二种方式为使用前缀“^~”这个前缀指定目录只有一个匹配结果的情况下nginx不检查正则表达式,例如:"location ^~ /images/"将在查询开始于/images/时停止搜索,所有的正则表达式不会被检查。
下面是各种查询方式的总结:
1、前缀“=”表示精确匹配查询,如果找到,立即停止查询。
2、指令仍然使用标准字符串,如果匹配使用“^~”前缀,停止查询。
3、正则表达式按照他们在配置文件中定义的顺序。
4、如果第三条产生一个匹配,这个匹配将被使用,否则将使用第二条的匹配。
例:
location = / {
# 只匹配 / 的查询.
[ configuration A ]
}
location / {
# 匹配任何以 / 开始的查询,但是正则表达式与一些较长的字符串将被首先匹配。
[ configuration B ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 开始的查询并且停止搜索,不检查正则表达式。
[ configuration C ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配任何以gif, jpg, or jpeg结尾的文件,但是所有 /images/ 目录的请求将在Configuration C中处理。
[ configuration D ]
}
各请求的处理如下例:
·/ -> configuration A
·/documents/document.html -> configuration B
·/images/1.gif -> configuration C
·/documents/1.jpg -> configuration D
注意你可以以任何顺序定义这4个配置并且匹配结果是相同的,但当使用嵌套的location结构时可能会将配置文件变的复杂并且产生一些比较意外的结果。
nginx如何决定哪个路径将被匹配?
大多数用户并不需要知道nginx内部如何确定使用哪一个路径,nginx会以很高效的方式为你的URI选择“最具体的”匹配,对于那些好奇者,可以阅读一下。所有的路径字符串按照字母顺序排列。nginx然后向下检查所有匹配并且直到找到一个比请求的URI更大的值,这个过程调用strcmp()函数,一旦strcmp()函数返回1,则停止搜索,一旦停止搜索,最后一个匹配的字符串将被使用。
例如我们有以下路径:
/
/a
/apple
/banana
我们现在请求服务器的"/az"路径,nginx将向下搜索路径目录,"/"首先被匹配,但是"/"比"/az"要小,所以继续向下搜索,"/a"同样被匹配,"/a"同样小于"/az","/apple"并不匹配,"/banana"要大于"/az",所以搜索停止,最后一个匹配"/a"将被使用。
命名的Lacations
较晚的版本(>0.7.x)支持命名location,这些location字段以@开头,以内部location的处理方式进行处理除了error_page或try_files指令
为了保持原始URI而指定的内部重定向。
location / {
try_files @joomla index.html;
}
location @joomla {
rewrite ^(.*)$ /index.php?q=$1 last;
}
指令24:log_not_found
语法:log_not_found [on|off]
默认值:log_not_found on
使用字段:http, server, location
说明:这个指令指定是否将一些文件没有找到的错误信息写入error_log指定的文件中。
指令25:log_subrequest
语法:log_subrequest [on|off]
默认值:log_subrequest off
使用字段:http, server, location
这个指令指定是否将一些经过rewrite rules和/或SSI requests的子请求请求写入access_log指定的文件
中。
指令26:msie_padding
语法:msie_padding [on|off]
默认值:msie_padding on
使用字段:http, server, location
这个指令指定开启或关闭MSIE浏览器的msie_padding功能,当这个功能开启,nginx将为响应实体分
配最小512字节,以便响应大于或等于400的状态代码。
这个空间预防MSIE浏览器激活“友好的”HTTP错误页面,所以不在服务器端隐藏更多的错误信息。
注意Chromium/Chrome拥有较好的HTTP错误页面,但是这个特征将不会发送某些错误信息。
指令27:msie_refresh
语法: msie_refresh [on|off]
默认值:msie_refresh off
使用字段:http, server, location
说明:这个指令允许或拒绝为MSIE发布一个refresh而不是做一次redirect
指令28:open_file_cache
语法:open_file_cache max = N [inactive = time] | off
默认值:open_file_cache off
使用字段:http, server, location
说明:这个指令指定缓存是否启用,如果启用,将记录文件以下信息:
·打开的文件描述符,大小信息和修改时间。
·存在的目录信息。
·在搜索文件过程中的错误信息 -- 没有这个文件、无法正确读取,参考open_file_cache_errors
指令参数:
·max - 指定缓存的最大数目,如果缓存溢出,最长使用过的文件(LRU)将被移除。
·inactive - 指定缓存文件被移除的时间,如果在这段时间内文件没被下载,默认为60秒。
·off - 禁止缓存。
例:
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
指令29:open_file_cache_errors
语法:open_file_cache_errors on | off
默认值:open_file_cache_errors off
使用字段:http, server, location
说明:这个指令指定是否在搜索一个文件是记录cache错误。
指令30:open_file_cache_min_uses
语法:open_file_cache_min_uses number
默认值:open_file_cache_min_uses 1
使用字段:http, server, location
这个指令指定了在open_file_cache指令无效的参数中一定的时间范围内可以使用的最小文件数,如
果使用更大的值,文件描述符在cache中总是打开状态。
指令31:open_file_cache_valid
语法:open_file_cache_valid time
默认值:open_file_cache_valid 60
使用字段:http, server, location
这个指令指定了何时需要检查open_file_cache中缓存项目的有效信息。
指令32:optimize_server_names
语法:optimize_server_names [ on|off ]
默认值:optimize_server_names on
使用字段:http, server
说明:这个指令指定是否在基于域名的虚拟主机中开启最优化的主机名检查。
尤其是检查影响到使用主机名的重定向,如果开启最优化,那么所有基于域名的虚拟主机监听的
一个“地址:端口对”具有相同的配置,这样在请求执行的时候并不进行再次检查,重定向会使
用第一个server name。
如果重定向必须使用主机名并且在客户端检查通过,那么这个参数必须设置为off。
注意:这个参数不建议在nginx 0.7.x版本中使用,请使用server_name_in_redirect。
指令33:port_in_redirect
语法:port_in_redirect [ on|off ]
默认值:port_in_redirect on
使用字段:http, server, location
说明:这个指令指定是否在让nginx在重定向操作中对端口进行操作。
如果这个选项打开,在重定向请求中nginx不会在url中添加端口。
指令34:recursive_error_pages
语法:recursive_error_pages [on|off]
默认值:recursive_error_pages off
使用字段:http, server, location
说明:recursive_error_pages指定启用除第一条error_page指令以外其他的error_page。
指令35:resolver
语法:resolver address
默认值:no
使用字段:http, server, location
指令36:resolver_timeout
语法:resolver_timeout time
默认值:30
使用字段:http, server, location
说明:解析超时时间。
指令37:root
语法:root path
默认值:root html
使用字段:http, server, location ,location中的if字段
说明:请求到达后的文件根目录。
下例中:
location /i/ {
root /spool/w3;
}
如果请求"/i/top.gif"文件,nginx将转到"/spool/w3/i/top.gif"文件。你可以在参数中使用变量。
注意:在请求中root会添加这个location到它的值后面,即"/i/top.gif"并不会请求"/spool/w3/top.gif"文
件,如果要实现上述类似于apache alias的功能,可以使用alias指令。
指令38:satisfy_any
语法:satisfy_any [ on|off ]
默认值:satisfy_any off
使用字段:location
说明:指令可以检查至少一个成功的密码效验,它在NginxHttpAccessModule或NginxHttpAuthBasicModule
这两个模块中执行。
location / {
satisfy_any on;
allow 192.168.1.0/32;
deny all;
auth_basic "closed site";
auth_basic_user_file conf/htpasswd;
}
指令39:send_timeout
语法:send_timeout the time
默认值:send_timeout 60
使用字段:http, server, location
指令指定了发送给客户端应答后的超时时间,Timeout是指没有进入完整established状态,只完成了
两次握手,如果超过这个时间客户端没有任何响应,nginx将关闭连接。
指令40:sendfile
语法:sendfile [ on|off ]
默认值:sendfile off
使用字段:http, server, location
说明:是否启用sendfile()函数。
指令41:server
语法:server {...}
默认值:no
使用字段:http
说明:server字段包含虚拟主机的配置。
没有明确的机制来分开基于域名(请求中的主机头)和基于IP的虚拟主机。
可以通过listen指令来指定必须连接到这个server块的所有地址和端口,并且在server_name指令中可
以指定所有的域名。
指令42:server_name
语法:server_name name [... ]
默认值:server_name hostname
使用字段:server
这个指令有两个作用:
·将HTTP请求的主机头与在nginx配置文件中的server{...}字段中指定的参数进行匹配,并且找出第
一个匹配结果。这就是如何定义虚拟主机的方法,域名遵循下述优先级规则:
1、完整匹配的名称。
2、名称开始于一个文件通配符:*.example.com。
3、名称结束于一个文件通配符:www.example.*。
4、使用正则表达式的名称。
如果没有匹配的结果,nginx配置文件将安装以下优先级使用[#server server { ... }]字段:
1、listen指令被标记为default的server字段。
2、第一个出现listen(或者默认的listen 80)的server字段。
·如果server_name_in_redirect被设置,这个指令将用于设置HTTP重定向的服务器名。
例:
server {
server_name example.com www.example.com;
}
第一个名称为服务器的基本名称,默认名称为机器的hostname。
当然,可以使用文件通配符:
server {
server_name example.com *.example.com www.example.*;
}
上述例子中的前两个名称可以合并为一个:
server {
server_name .example.com;
}
同样可以使用正则表达式。名称前面加“~”:
server {
server_name www.example.com ~^www\d+\.example\.com$;
}
如果客户端请求中没有主机头或者没有匹配server_name的主机头,服务器基本名称将被用于一个
HTTP重定向,你可以只使用“*”来强制nginx在HTTP重定向中使用Host头(注意*不能用于第一
个名称,不过你可以用一个很**的名称代替,如“_”)
server {
server_name example.com *;
}
server {
server_name _ *;
}
在nginx0.6.x中有稍许改变:
server {
server_name _;
}
0.7.12版本以后已经可以支持空服务器名,以处理那些没有主机头的请求:
server {
server_name "";
}
指令43:server_name_in_redirect
语法:server_name_in_redirect on|off
默认值:server_name_in_redirect on
使用字段:http, server, location
如果这个指令打开,nginx将使用server_name指定的基本服务器名作为重定向地址,如果关闭,
nginx将使用请求中的主机头。
指令44:server_names_hash_max_size
语法:server_names_hash_max_size number
默认值:server_names_hash_max_size 512
使用字段:http
服务器名称哈希表的最大值,更多信息请参考nginx Optimizations。
指令45:server_names_hash_bucket_size
语法:server_names_hash_bucket_size number
默认值:server_names_hash_bucket_size 32/64/128
使用字段:http
服务器名称哈希表每个页框的大小,这个指令的默认值依赖于cpu缓存。更多信息请参考nginx
Optimizations。
指令46:server_tokens
语法:server_tokens on|off
默认值:server_tokens on
使用字段:http, server, location
是否在错误页面和服务器头中输出nginx版本信息。
指令47:tcp_nodelay
语法:tcp_nodelay [on|off]
默认值:tcp_nodelay on
使用字段:http, server, location
这个指令指定是否使用socket的TCP_NODELAY选项,这个选项只对keep-alive连接有效。
点击这里了解更多关于TCP_NODELAY选项的信息。
指令48:tcp_nopush
语法:tcp_nopush [on|off]
默认值:tcp_nopush off
使用字段:http, server, location
这个指令指定是否使用socket的TCP_NOPUSH(FreeBSD)或TCP_CORK(linux)选项,这个选项
只在使用sendfile时有效。
设置这个选项的原因是nginx试图将它的HTTP应答头封装到一个包中。
指令49:try_files
语法:try_files file1 [file2 ... filen] fallback
默认值:none
使用字段:location
这个指令告诉nginx将测试参数中每个文件的存在,并且URI将使用第一个找到的文件,如果没有找
到文件,将请求名为fallback(可以使任何名称)的location字段,fallback是一个必须的参数,它可
以是一个命名的location或者可靠的URI。
例:
location / {
try_files index.html index.htm @fallback;
}
location @fallback {
root /var/www/error;
index index.html;
}
指令50:types
语法:types {...}
使用字段:http, server, location
这个字段指定一些扩展的文件对应方式与应答的MIME类型,一个MIME类型可以有一些与其类似的扩展。默认使用以下文件对应方式:
types {
text/html html;
image/gif gif;
image/jpeg jpg;
}
完整的对应视图文件为conf/mime.types,并且将被包含。
如果你想让某些特定的location的处理方式使用MIME类型:application/octet-stream,可以使用以下配置:
location /download/ {
types { }
default_type application/octet-stream;
}
变量
core module 支持一些内置的变量,与apache使用的变量相一致。
首先,一些变量是代表了客户端请求标题的字段,如:$http_user_agent, $http_cookie等等。
除此之外,下列是一些其他变量:
$arg_PARAMETER :这个变量包含在查询字符串时GET请求PARAMETER的值。
$args :这个变量等于请求行中的参数。
$binary_remote_addr :二进制码形式的客户端地址。
$body_bytes_sent :未知。
$content_length :请求头中的Content-length字段。
$content_type :请求头中的Content-Type字段。
$cookie_COOKIE :cookie COOKIE的值。
$document_root :当前请求在root指令中指定的值。
$document_uri :与$uri相同。
$host :请求中的主机头字段,如果请求中的主机头不可用,则为服务器处理请求的服务器名称。
$is_args :如果$args设置,值为"?",否则为""。
$limit_rate :这个变量可以限制连接速率。
$query_string :与$args相同。
$remote_addr :客户端的IP地址。
$remote_port :客户端的端口。
$remote_user :已经经过Auth Basic Module验证的用户名。
$request_filename :当前连接请求的文件路径,由root或alias指令与URI请求生成。
$request_body :这个变量(0.7.58+)包含请求的主要信息。在使用proxy_pass或fastcgi_pass指令的location中比较有意义。
$request_body_file :客户端请求主体信息的临时文件名。
$request_completion :未知。
$request_method :这个变量是客户端请求的动作,通常为GET或POST。包括0.8.20及之前的版本中,这个变量总为main request中的动作,如果当前请求是一个子请求,并不使用这个当前请求的动作。
$request_uri :完整初始化的URI及其一些参数。
$scheme :HTTP方法(如http,https)。按需使用,例:
rewrite ^(.+)$ $scheme://example.com$1 redirect;
$server_addr :服务器地址,在完成一次系统调用后可以确定这个值,如果要绕开系统调用,则必须在listen中指定地址并且使用bind参数。
$server_name:服务器名称。
$server_port :请求到达服务器的端口号。
$server_protocol :请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$uri :请求中的当前URI,可以不同于初始化的值,例如内部重定向,或者使用index指令中一些包含内部重定向的文件。
二、HTTP负载均衡模块
三、HTTP访问控制模块
四、HTTP基本认证模块
五、HTTP目录清单生成模块
六、浏览器相关模块
七、字符集设置模块
八、Empty GIF模块
九、FastCGI模块
十、Geo模块
十一、Gzip模块
十二、HTTP头处理模块
十三、默认主页设置模块
十四、HTTP Referer模块
十五、HTTP Limit zone模块
十六、HTTP Limit Requests模块
十七、日志模块
十八、Map模块
十九、Memcache模块
二十、HTTP代理模块
二十一、URL重写模块
二十二、SSI模块
二十三、User ID模块