【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模块

NGINX模块(二)的更多相关文章

  1. 分布式文件系统 - FastDFS 配置 Nginx 模块及上传测试

    也不说废话,直接干 上一篇 分布式文件系统 - FastDFS 在 CentOS 下配置安装部署 中安装了 FastDFS 后,并配置启动了 Tracker 和 Storage 服务,已经可以上传文件 ...

  2. nginx 模块及运行机制 第三章

    概述:nginx服务器模块.web请求处理机制及事件驱动模型.进程功能和进程间通信 一:Nginx的模块化结构设计: 1.核心模块:指的是nginx服务器运行当中必不可少的模块,这些模块提供了最基本最 ...

  3. 【重要】Nginx模块Lua-Nginx-Module学习笔记(三)Nginx + Lua + Redis 已安装成功(非openresty 方式安装)

    源码地址:https://github.com/Tinywan/Lua-Nginx-Redis 一. 目标 使用Redis做分布式缓存:使用lua API来访问redis缓存:使用nginx向客户端提 ...

  4. nginx源代码分析--nginx模块解析

    nginx的模块很之多.能够觉得全部代码都是以模块的形式组织.这包含核心模块和功能模块,针对不同的应用场合.并不是全部的功能模块都要被用到,附录A给出的是默认configure(即简单的httpser ...

  5. 通过apache,和nginx模块去除html中的空格和tab

    最近一个项目中,合作方要求去除html中的空格,不想改代码,所以百度了一下通过apache,和nginx模块去除html中的空格和tab的方案,下面记录下来: 一.nginx nginx可以通过mod ...

  6. FastDFS 配置 Nginx 模块及访问测试

    #备注:以下nginx-1.10.3源码目录根据nginx版本号不同会有相应的变化,以nginx版本号为准#一.安装 Nginx 和 fastdfs-nginx-module1,安装 Nginx 请看 ...

  7. 结合源码看nginx-1.4.0之nginx模块组织结构详解

    目录 0. 摘要 1. nginx模块组织结构 2. nginx模块数据结构 3. nginx模块初始化 4. 一个简单的http模块 5. 小结 6. 参考资料 0. 摘要 nginx有五大优点:模 ...

  8. 【转】Nginx模块开发入门

    转自: http://kb.cnblogs.com/page/98352/ 结论:对Nginx模块开发入门做了一个helloworld的示例,简单易懂.也有一定的深度.值得一看. Nginx模块开发入 ...

  9. Nginx模块开发入门

    前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%.与Apache相比,Nginx在高并 ...

随机推荐

  1. UWP 实现分享功能

    一:需求 实现点击分享按钮,分享内容到微博,邮箱等.. like this 二:DataTransferManager 数据传输管理类 DataTransferManager dataTransfer ...

  2. AtCoder Grand Contest 012 B

    B - Splatter Painting Time limit : 2sec / Memory limit : 256MB Score : 700 points Problem Statement ...

  3. loj124 除数函数求和 1

    loj124 除数函数求和 1 https://loj.ac/problem/124 $\sum_{i=1}^n(\sum_{d|i}d^k)=\sum_{i=1}^n(i^k*{\lfloor}{\ ...

  4. 线段树(单点更新) POJ 2886 Who Gets the Most Candies?

    题目传送门 #include <cstdio> #include <cstring> #define lson l, m, rt << 1 #define rson ...

  5. JAVA常用设计模式(静态化调用和实例化调用的区别,编辑可见 )

    用newInstance()与用new是区别的,区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类,且newInstance()只能调用无参构造函数. 最大的区别在于内存.静态方法 ...

  6. canvas 平移&缩放

    1.平移 canvas其实只是一个包装器,真正起着重要作用的部分是2D渲染上下文,这才是我们真正绘制图形的地方. 然而2D渲染上下文是一种基于屏幕的标准绘制平台.它采用屏幕的笛卡尔坐标系统,以左上角( ...

  7. 【C#】基础之数组排序,对象大小比较(对比器)

    C#基础之数组排序,对象大小比较 原文链接:[OutOfMemory.CN] 从个小例子开始: 1 2 3 int[] intArray = new int[]{2,3,6,1,4,5}; Array ...

  8. webform简单空间以及数据库访问

    1.简单控件 Label - 文字,编译后显示的是<span> 一说到边框:1.颜色 2.类型,比如solid实线3.width宽度Literal -里面可以承载很多东西,比如文字,比如a ...

  9. Intent实现界面跳转、程序跳转

    一个程序往往由多个界面组成,界面之间的跳转,实质是Activity之间的跳转. 从当前程序跳转到其它程序,实质是启动了目标程序的入口Activity. Intent被称为意图,常用于组件之间的交互,可 ...

  10. CF963A Alternating Sum

    思路:利用周期性转化为等比数列求和. 注意当a != b的时候 bk * inv(ak) % (109 + 9)依然有可能等于1,不知道为什么. 实现: #include <bits/stdc+ ...