模块ngx_http_core_module
Directives
句法: | absolute_redirect |
---|---|
默认: |
absolute_redirect on; |
语境: | http ,服务器 ,位置 |
该指令出现在1.11.8版本中。
如果禁用,nginx发出的重定向将是相对的。
另请参阅server_name_in_redirect和port_in_redirect指令。
句法: | aio |
---|---|
默认: |
aio off; |
语境: | http ,服务器 ,位置 |
该指令出现在0.8.11版本中。
启用或禁用在FreeBSD和Linux上使用异步文件I / O(AIO):
location /video/ { aio on; output_buffers 1 64k; }
在FreeBSD上,可以从FreeBSD 4.3开始使用AIO。在FreeBSD 11.0之前,AIO可以静态链接到内核中:
options VFS_AIO
或作为内核可加载模块动态加载:
kldload aio
在Linux上,可以从内核版本2.6.22开始使用AIO。另外,需要启用directio,否则读取将被阻塞:
location /video/ { aio on; directio 512; output_buffers 1 128k; }
在Linux上,directio只能用于读取512字节边界对齐的块(或XFS为4K)。文件未对齐的结束以阻塞模式读取。对于字节范围请求也不适用于FLV请求,也不适用于文件开头的文件:在文件开头和结尾读取未对齐的数据将被阻止。
当在Linux上启用AIO和sendfile时,AIO用于大于或等于directio指令中指定大小的文件,而sendfile 用于较小尺寸的文件或禁用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 off; |
语境: | http ,服务器 ,位置 |
该指令出现在1.9.13版本中。
如果aio被启用,则指定是否用于写入文件。目前,这仅在使用aio线程
时有效,并且仅限于使用从代理服务器接收的数据写入临时文件。
句法: | 别名 |
---|---|
默认: | - |
语境: | 位置 T0> |
定义指定位置的替换。例如,使用以下配置
location /i/ { alias /data/w3/images/; }
根据“/i/top.gif
”的要求,将发送文件/data/w3/images/top.gif
。
path
值可以包含变量,除了$ document_root
和$ realpath_root
。
如果在使用正则表达式定义的位置内使用别名
,那么这种正则表达式应该包含捕获,别名
应该引用这些捕获(0.7.40),例如:
location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ { alias /data/w3/images/$1; }
当位置与指令值的最后一部分相符时:
location /images/ { alias /data/w3/images/; }
更好地使用根指令:
location /images/ { root /data/w3; }
句法: | chunked_transfer_encoding |
---|---|
默认: |
chunked_transfer_encoding on; |
语境: | http ,服务器 ,位置 |
允许在HTTP / 1.1中禁用分块传输编码。当使用软件未能支持分块编码时,尽管符合标准要求,它可能会派上用场。
句法: | client_body_buffer_size |
---|---|
默认: |
client_body_buffer_size 8k|16k; |
语境: | http ,服务器 ,位置 |
设置读取客户端请求体的缓冲区大小。如果请求体大于缓冲区,则整个身体或仅将其部分写入临时文件。默认情况下,缓冲区大小等于两个内存页面。这是x86上的8K,其他32位平台和x86-64。其他64位平台通常为16K。
句法: | client_body_in_file_only |
---|---|
默认: |
client_body_in_file_only off; |
语境: | http ,服务器 ,位置 |
确定nginx是否应将整个客户端请求体保存到文件中。该指令可以在调试期间使用,或者当使用模块ngx_http_perl_module的$ request_body_file
变量或$ r-> request_body_file 。
当设置为上的值时,请求处理后不会删除临时文件。
值clean
将导致请求处理后剩下的临时文件被删除。
句法: | client_body_in_single_buffer |
---|---|
默认: |
client_body_in_single_buffer off; |
语境: | http ,服务器 ,位置 |
确定nginx是否应将整个客户端请求体保存在单个缓冲区中。当使用$ request_body
变量时,建议使用该指令,以保存涉及的复制操作数。
句法: | client_body_temp_path |
---|---|
默认: |
client_body_temp_path client_body_temp; |
语境: | http ,服务器 ,位置 |
定义用于存储持有客户机请求主体的临时文件的目录。最多可以在指定目录下使用三级子目录层次结构。例如,在以下配置中
client_body_temp_path /spool/nginx/client_temp 1 2;
临时文件的路径可能如下所示:
/spool/nginx/client_temp/7/45/00000123457
句法: | client_body_timeout |
---|---|
默认: |
client_body_timeout 60s; |
语境: | http ,服务器 ,位置 |
定义读取客户端请求体的超时。超时设置仅在两个连续读操作之间的时间间隔,而不是整个请求体的传输。如果客户端在此时间内没有发送任何内容,则将408(请求超时)错误返回给客户端。
句法: | client_header_buffer_size |
---|---|
默认: |
client_header_buffer_size 1k; |
语境: | http ,服务器 |
设置读取客户端请求标头的缓冲区大小。对于大多数请求,1K字节的缓冲区就足够了。但是,如果一个请求包含长cookie,或来自WAP客户端,则它可能不适合1K。如果请求行或请求头字段不适合此缓冲区,则分配由large_client_header_buffers指令配置的较大缓冲区。
句法: | client_header_timeout |
---|---|
默认: |
client_header_timeout 60s; |
语境: | http ,服务器 |
定义读取客户端请求标头的超时。如果客户端在此时间内没有传输整个报头,则将408(请求超时)错误返回给客户端。
句法: | client_max_body_size |
---|---|
默认: |
client_max_body_size 1m; |
语境: | http ,服务器 ,位置 |
设置在“Content-Length”请求头域中指定的客户端请求体的最大允许大小。如果请求中的大小超过配置值,则将413(请求实体太大)错误返回给客户端。请注意,浏览器无法正确显示此错误。将size
设置为0将禁用检查客户端请求正文大小。
句法: | connection_pool_size |
---|---|
默认: |
connection_pool_size 256|512; |
语境: | http ,服务器 |
允许精确调整每个连接的内存分配。该指令对性能影响最小,一般不应使用。默认情况下,32位平台上的大小等于256字节,64位平台上的512字节。
在版本1.9.8之前,所有平台的默认值为256。
句法: | default_type |
---|---|
默认: |
default_type text/plain; |
语境: | http ,服务器 ,位置 |
定义响应的默认MIME类型。可以使用类型指令设置MIME类型的文件扩展名映射。
句法: | directio |
---|---|
默认: |
directio off; |
语境: | http ,服务器 ,位置 |
该指令出现在0.7.7版本中。
使用O_DIRECT
标志(FreeBSD,Linux),F_NOCACHE
标志(macOS)或directio()
功能(Solaris)当读取大于或等于指定的size
时。该指令自动禁用(0.7.15)对于给定请求使用sendfile。它可以用于服务大文件:
directio 4m;
或在Linux上使用aio时。
句法: | directio_alignment |
---|---|
默认: |
directio_alignment 512; |
语境: | http ,服务器 ,位置 |
该指令出现在0.8.11版本中。
设置directio的对齐方式。在大多数情况下,512字节的对齐就足够了。但是,在Linux下使用XFS时,需要增加到4K。
句法: | disable_symlinks disable_symlinks |
---|---|
默认: |
disable_symlinks off; |
语境: | http ,服务器 ,位置 |
该指令出现在1.1.15版本中。
确定打开文件时应如何处理符号链接:
关 T0>
- 路径名中的符号链接是允许的,不被检查。这是默认行为。
- 上
T0>
- 如果路径名的任何组件是符号链接,则对文件的访问被拒绝。
if_not_owner T0>
- 如果路径名的任何组件是符号链接,并且链接指向的链接和对象具有不同的所有者,则拒绝访问文件。
从 T0> =
part
- 当检查符号链接(和
if_not_owner
之间的参数)时,通常会检查路径名的所有组件。
可以通过从 =part
参数另外指定来避免检查路径名的初始部分中的符号链接。
在这种情况下,只能从指定的初始部分后面的路径名组件检查符号链接。如果该值不是检查的路径名的初始部分,则会检查整个路径名,就好像此参数根本没有指定。如果该值与整个文件名匹配,则不会检查符号链接。参数值可以包含变量。
Example:
disable_symlinks on from=$document_root;
此指令仅适用于具有openat()
和fstatat()
接口的系统。这样的系统包括现代版本的FreeBSD,Linux和Solaris。
和中的参数
添加了一个处理开销。if_not_owner
在不支持打开仅用于搜索的目录的系统上,要使用这些参数,需要工作进程对所有正在检查的目录具有读取权限。
目前,ngx_http_autoindex_module,ngx_http_random_index_module和ngx_http_dav_module模块忽略此指令。
句法: | error_page |
---|---|
默认: | - |
语境: | http ,服务器 ,位置 ,如果位置 |
定义将针对指定的错误显示的URI。a uri
值可以包含变量。
例:
error_page 404 /404.html; error_page 500 502 503 504 /50x.html;
这导致一个内部重定向到指定的uri
,客户端请求方法更改为“GET
”(对于除“GET
”之外的所有方法, “ HEAD T4>”)。
此外,可以使用“=
response
”语法将响应代码更改为另一个,例如:
error_page 404 =200 /empty.gif;
如果代理服务器或FastCGI / uwsgi / SCGI服务器处理错误响应,并且服务器可能返回不同的响应代码(例如,200,302,401或404),则可以使用返回的代码进行响应:
error_page 404 = /404.php;
如果在内部重定向期间不需要更改URI和方法,则可以将错误处理传递到命名位置:
location / { error_page 404 = @fallback; } location @fallback { proxy_pass http://backend; }
如果uri
处理导致错误,最后发生错误的状态代码将返回给客户端。
还可以使用URL重定向进行错误处理:
error_page 403 http://example.com/forbidden.html; error_page 404 =301 http://example.com/notfound.html;
在这种情况下,默认情况下,将响应代码302返回给客户端。它只能更改为重定向状态代码之一(301,302,303,307和308)。
当且仅当在当前级别上没有定义error_page
指令时,这些伪指令将从上一级继承。
句法: | etag |
---|---|
默认: |
etag on; |
语境: | http ,服务器 ,位置 |
该指令出现在1.3.3版本中。
启用或禁用为静态资源自动生成“ETag”响应头域。
句法: | http {...} |
---|---|
默认: | - |
语境: | 主 T0> |
提供指定HTTP服务器指令的配置文件上下文。
句法: | if_modified_since |
---|---|
默认: |
if_modified_since exact; |
语境: | http ,服务器 ,位置 |
该指令出现在0.7.24版本中。
指定如何将响应的修改时间与“If-Modified-Since”请求头字段中的时间进行比较:
关 T0>
- “If-Modified-Since”请求头字段被忽略(0.7.34);
确切 T0>
- 完全符合;
前 T0>
- 响应的修改时间小于或等于“If-Modified-Since”请求头字段中的时间。
句法: | ignore_invalid_headers |
---|---|
默认: |
ignore_invalid_headers on; |
语境: | http ,服务器 |
控制是否应忽略具有无效名称的头字段。有效的名称由英文字母,数字,连字符和可能的下划线组成(由underscores_in_headers指令控制)。
如果在服务器级别指定了该指令,则仅在服务器为默认服务器时才使用该值。指定的值也适用于侦听相同地址和端口的所有虚拟服务器。
句法: | 内部 T1>; T0> |
---|---|
默认: | - |
语境: | 位置 T0> |
指定给定位置只能用于内部请求。对于外部请求,返回客户端错误404(未找到)。内部请求如下:
- 请求由error_page,索引,random_index和try_files指令重定向;
- 来自上游服务器的“X-Accel-Redirect”响应头字段重定向的请求;
- 由ngx_http_ssi_module模块的
include virtual
“命令和ngx_http_addition_module模块指令组成的子请求; - 请求由重写指令更改。
例:
error_page 404 /404.html; location /404.html { internal; }
每个请求限制10个内部重定向,以防止可能发生在不正确配置中的请求处理周期。如果达到此限制,则返回错误500(内部服务器错误)。在这种情况下,可以在错误日志中看到“重写或内部重定向循环”消息。
句法: | keepalive_disable |
---|---|
默认: |
keepalive_disable msie6; |
语境: | http ,服务器 ,位置 |
禁用与行为不端的浏览器保持连接。browser
参数指定哪些浏览器将受到影响。一旦接收到POST请求,值msie6
将禁用与旧版本MSIE的保持连接。值safari
在macOS和类似MacOS的操作系统上禁用Safari和Safari浏览器的保持连接。值none
可以与所有浏览器保持连接。
在版本1.1.18之前,值safari
匹配所有操作系统上的所有Safari和Safari浏览器,默认情况下禁用与之连接的Keep-alive连接。
句法: | keepalive_requests |
---|---|
默认: |
keepalive_requests 100; |
语境: | http ,服务器 ,位置 |
该指令出现在0.8.0版本中。
设置通过一个保持活动连接可以提供的最大请求数。在发出最大请求数后,连接被关闭。
句法: | keepalive_timeout |
---|---|
默认: |
keepalive_timeout 75s; |
语境: | http ,服务器 ,位置 |
第一个参数设置一个超时时间,保持活动的客户端连接将在服务器端保持打开状态。零值将禁用保持活动的客户端连接。可选的第二个参数在“Keep-Alive:timeout = time
”响应头域中设置一个值。两个参数可能不同。
Mozilla和Konqueror会识别“Keep-Alive:timeout = time
”头字段。MSIE在大约60秒内自行关闭保持连接。
句法: | large_client_header_buffers |
---|---|
默认: |
large_client_header_buffers 4 8k; |
语境: | http ,服务器 |
设置用于读取大客户端请求报头的缓冲区的最大number
和size
。请求行不能超过一个缓冲区的大小,或者将414(请求URI太大)错误返回给客户端。请求头字段也不能超过一个缓冲区的大小,或者将400(错误请求)错误返回给客户端。缓冲区只能按需分配。默认情况下,缓冲区大小等于8K字节。如果在请求处理结束后,连接被转换为保持活动状态,这些缓冲区被释放。
句法: | limit_except |
---|---|
默认: | - |
语境: | 位置 T0> |
限制允许位置内的HTTP方法。method
参数可以是以下之一:GET
,HEAD
,POST
,PUT ,
允许DELETE
,MKCOL
,COPY
,MOVE
,选项
, PRFIND
,PROPPATCH
,LOCK
,UNLOCK
或PATCH
。GET
方法也允许HEAD
方法。可以使用ngx_http_access_module和ngx_http_auth_basic_module模块指令来限制对其他方法的访问:
limit_except GET { allow 192.168.1.0/32; deny all; }
请注意,这将限制访问除 GET和HEAD之外的所有方法。
句法: | limit_rate |
---|---|
默认: |
limit_rate 0; |
语境: | http ,服务器 ,位置 ,如果位置 |
限制客户端的响应传输速率。rate
以字节/秒指定。零值禁用速率限制。限制是根据请求设置的,因此如果客户端同时打开两个连接,则整体速率将是指定限制的两倍。
速率限制也可以在$ limit_rate
变量中设置。在某些条件下应限制利率的情况可能是有用的:
server { if ($slow) { set $limit_rate 4k; } ... }
也可以在代理服务器响应的“X-Accel-Limit-Rate”头字段中设置速率限制。可以使用proxy_ignore_headers,fastcgi_ignore_headers,uwsgi_ignore_headers和scgi_ignore_headers指令禁用此功能。
句法: | limit_rate_after |
---|---|
默认: |
limit_rate_after 0; |
语境: | http ,服务器 ,位置 ,如果位置 |
该指令出现在0.8.0版本中。
设置初始量,之后进一步传输对客户端的响应将被限制。
例:
location /flv/ { flv; limit_rate_after 500k; limit_rate 50k; }
句法: | lingering_close |
---|---|
默认: |
lingering_close on; |
语境: | http ,服务器 ,位置 |
该指令出现在1.1.0和1.0.6版本中。
控制nginx如何关闭客户端连接。
在完全关闭连接之前,默认值“”指示nginx到等待客户端的附加数据和处理,但只有启发式建议客户端可能会发送更多的数据。
值“始终
”将导致nginx无条件地等待并处理其他客户端数据。
值“off
”告诉nginx不要等待更多的数据并立即关闭连接。这种行为打破了协议,不能在正常情况下使用。
句法: | lingering_time |
---|---|
默认: |
lingering_time 30s; |
语境: | http ,服务器 ,位置 |
当lingering_close有效时,该指令指定nginx处理(读取和忽略)来自客户端的附加数据的最长时间。之后,连接将关闭,即使会有更多的数据。
句法: | lingering_timeout |
---|---|
默认: |
lingering_timeout 5s; |
语境: | http ,服务器 ,位置 |
当lingering_close有效时,此指令指定更多客户端数据到达的最长等待时间。如果在此期间未收到数据,则连接被关闭。否则,读取和忽略数据,并且nginx再次开始等待更多的数据。“wait-read-ignore”循环被重复,但不再由lingering_time指令指定。
句法: | listen listen listen |
---|---|
默认: |
listen *:80 | *:8000; |
语境: | 服务器 T0> |
为服务器将接受请求的UNIX域套接字设置IP的address
和port
或path
。可以指定address
和port
,或仅address
或port
。address
也可以是主机名,例如:
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 [::1];
UNIX域域(0.8.21)用“unix:
”前缀指定:
listen unix:/var/run/nginx.sock;
如果只给出了address
,则使用端口80。
如果指令不存在,那么如果nginx以超级用户权限运行,否则使用*:80
,否则使用*:8000
。
default_server
参数(如果存在)将导致服务器成为指定的address
:port
对的默认服务器。如果没有指令具有default_server
参数,则具有address
:port
对的第一台服务器将成为该对的默认服务器。
在0.8.21之前的版本中,此参数简单地命名为default
。
ssl
参数(0.7.14)允许指定此端口上接受的所有连接都应该工作在SSL模式。这样可以为处理HTTP和HTTPS请求的服务器提供更紧凑的配置。
http2
参数(1.9.5)配置端口接受HTTP / 2连接。通常,为了使这个工作,也应该指定ssl
参数,但nginx也可以配置为接受没有SSL的HTTP / 2连接。
spdy
参数(1.3.15-1.9.4)允许在此端口上接受SPDY连接。通常,为了使这个工作,也应该指定ssl
参数,但是nginx也可以被配置为接受没有SSL的SPDY连接。
proxy_protocol
参数(1.5.12)允许指定此端口上接受的所有连接都应使用PROXY协议。
listen
指令可以具有特定于套接字相关系统调用的几个附加参数。这些参数可以在任何listen
指令中指定,但对于给定的address
:port
对只能指定一次。
在0.8.21之前的版本中,只能在listen
指令中与默认
参数一起指定。
setfib T0> =
number
- 该参数(0.8.44)为侦听套接字设置关联的路由表FIB(
SO_SETFIB
选项)。这目前只适用于FreeBSD。 FASTOPEN T0> =
number
- 对于尚未完成三次握手的连接队列的最大长度,为侦听套接字(1.5.8)和限制 t>启用“TCP快速打开”。
不要启用此功能,除非服务器可以处理数据多次接收相同的SYN数据包。
积压 T0> =
number
- 在
listen()
调用中设置限制挂起连接队列的最大长度的backlog
参数。默认情况下,FreeBSD,DragonFly BSD和macOS上的backlog
设置为-1,在其他平台上设置为511。 rcvbuf T0> =
size
- 设置侦听套接字的接收缓冲区大小(
SO_RCVBUF
选项)。 sndbuf T0> =
size
- 设置侦听套接字的发送缓冲区大小(
SO_SNDBUF
选项)。 accept_filter T0> =
filter
- 设置用于过滤传入连接的侦听套接字的接受过滤器(
SO_ACCEPTFILTER
选项)的名称,然后再传递给accept()
。这只适用于FreeBSD和NetBSD 5.0+。可能的值为dataready和httpready。 推迟 T0>
- 指示在Linux上使用延迟的
accept()
(TCP_DEFER_ACCEPT
套接字选项)。 结合 T0>
- 指示为给定的
address
:port
对单独调用bind()
。This is useful because if there are severallisten
directives with the same port but different addresses, and one of thelisten
directives listens on all addresses for the given port (*:
port
), nginx willbind()
only to*:
port
. 应该注意的是,在这种情况下,将会进行getsockname()
系统调用,以确定接受该连接的地址。如果setfib
,backlog
,rcvbuf
,sndbuf
,accept_filter
,对于给定的
,address
ipv6only
或so_keepalive
参数使用:port
对a将一直调用bind()
调用。 ipv6only T0> =上 T1>
|
关 T2>
- 此参数(0.7.42)决定(通过
IPV6_V6ONLY
套接字选项)是否侦听通配符地址[::]
上的IPv6套接字将仅接受IPv6连接或两个IPv6和IPv4连接。此参数默认为开启。它只能在开始时设置一次。在版本1.3.4之前,如果该参数被省略,则操作系统的设置对于套接字有效。
reuseport T0>
- 此参数(1.9.1)指示为每个工作进程创建一个单独的监听套接字(使用
SO_REUSEPORT
套接字选项),允许内核在工作进程之间分配传入连接。目前,它仅适用于Linux 3.9+和DragonFly BSD。不适当的使用此选项可能具有含义的安全性。
-
so_keepalive
=on
|off
|[keepidle
]:[keepintvl
]:[keepcnt
] - 此参数(1.1.11)配置侦听套接字的“TCP keepalive”行为。如果省略此参数,则操作系统的设置将对套接字有效。如果设置为上的值“
”,则套接字将打开
如果设置为“SO_KEEPALIVE
选项。off
”,则套接字将关闭SO_KEEPALIVE
选项。一些操作系统支持使用TCP_KEEPIDLE
,TCP_KEEPINTVL
和TCP_KEEPCNT
套接字选项在每个套接字上设置TCP保活性参数。在这样的系统上(目前为Linux 2.4+,NetBSD 5+和FreeBSD 9.0-STABLE),可以使用keepidle
,keepintvl
和keepcnt
参数。可以省略一个或两个参数,在这种情况下,相应套接字选项的系统默认设置将生效。例如,
将空闲超时(so_keepalive=30m::10
TCP_KEEPIDLE
)设置为30分钟,将探测间隔(TCP_KEEPINTVL
)保留在系统默认值,并设置探测计数(TCP_KEEPCNT )至10个探针。
例:
listen 127.0.0.1 default_server accept_filter=dataready backlog=1024;
句法: | 位置 [ 位置 |
---|---|
默认: | - |
语境: | server ,location |
根据请求URI设置配置。
The matching is performed against a normalized URI, after decoding the text encoded in the “%XX
” form, resolving references to relative path components “.
” and “..
”, and possible compression of two or more adjacent slashes into a single slash.
位置可以由前缀字符串或正则表达式定义。正则表达式用前面的“〜*
”修饰符(不区分大小写匹配)或“〜
”修饰符指定(用于区分大小写的匹配)。要找到匹配给定请求的位置,nginx首先检查使用前缀字符串(前缀位置)定义的位置。其中,选择并记住具有最长匹配前缀的位置。然后检查正则表达式,按照它们在配置文件中的显示顺序。The search of regular expressions terminates on the first match, and the corresponding configuration is used. If no match with a regular expression is found then the configuration of the prefix location remembered earlier is used.
位置
块可以嵌套,下面提到一些例外。
对于不区分大小写的操作系统,如macOS和Cygwin,与前缀字符串的匹配忽略了一个情况(0.7.7)。但是,比较仅限于一个字节的区域设置。
正则表达式可以包含稍后可以在其他指令中使用的捕获(0.7.40)。
如果最长匹配的前缀位置具有“^〜
”修饰符,则不会检查正则表达式。
另外,使用“=
”修饰符可以定义一个完全匹配的URI和位置。如果找到完全匹配,则搜索终止。例如,如果频繁出现“/
”请求,则定义“location = /
”将加快处理这些请求,因为搜索在第一次比较后立即终止。这样的位置不能明显地包含嵌套的位置。
在从0.7.1到0.8.41的版本中,如果一个请求匹配前缀位置,而没有“=
”和“^〜
”修饰符,则搜索也终止并且正常没有检查表达式。
我们举一个例子说明上面的例子:
location = / { [ configuration A ] } location / { [ configuration B ] } location /documents/ { [ configuration C ] } location ^~ /images/ { [ configuration D ] } location ~* \.(gif|jpg|jpeg)$ { [ configuration E ] }
“/
”请求将与配置A匹配,“/index.html
”请求将匹配配置B,“/documents/document.html “请求将匹配配置C,”
/images/1.gif
“请求将匹配配置D,”/documents/1.jpg“请求将匹配配置E.
“@
”前缀定义了一个命名的位置。这样的位置不用于常规请求处理,而是用于请求重定向。它们不能嵌套,不能包含嵌套位置。
如果位置由以斜杠字符结尾的前缀字符串定义,并且请求由proxy_pass,fastcgi_pass,uwsgi_pass之一处理, scgi_pass或memcached_pass,则执行特殊处理。响应URI等于此字符串但不带尾部斜杠的请求,将使用代码301的永久重定向返回到所附加的斜杠所请求的URI。如果不希望这样做,可以像这样定义URI和位置的完全匹配:
location /user/ { proxy_pass http://user.example.com; } location = /user { proxy_pass http://login.example.com; }
句法: | log_not_found |
---|---|
默认: |
log_not_found on; |
语境: | http ,服务器 ,位置 |
启用或禁用在error_log中记录未找到文件的错误。
句法: | log_subrequest |
---|---|
默认: |
log_subrequest off; |
语境: | http ,服务器 ,位置 |
启用或禁用子请求记录到access_log。
句法: | max_ranges |
---|---|
默认: | - |
语境: | http ,服务器 ,位置 |
该指令出现在1.1.2版本中。
限制字节范围请求中允许的最大允许数量。如果没有指定字节范围,则处理超出限制的请求。默认情况下,范围数不受限制。零值完全禁用字节范围支持。
句法: | merge_slashes |
---|---|
默认: |
merge_slashes on; |
语境: | http ,服务器 |
启用或禁用将URI中的两个或多个相邻斜杠压缩为单个斜杠。
请注意,压缩对于前缀字符串和正则表达式位置的正确匹配至关重要。没有它,“// scripts / one.php
”请求将不匹配
location /scripts/ { ... }
并可能被处理为一个静态文件。所以它被转换为“/scripts/one.php
”。
如果URI包含base64编码的名称,则可以使压缩关闭
,因为base64内部使用“/
”字符。但是,出于安全考虑,最好避免关闭压缩。
如果在服务器级别指定了该指令,则仅在服务器为默认服务器时才使用该值。指定的值也适用于侦听相同地址和端口的所有虚拟服务器。
句法: | msie_padding |
---|---|
默认: |
msie_padding on; |
语境: | http ,服务器 ,位置 |
启用或禁用向状态大于400的MSIE客户端的响应添加注释以将响应大小增加到512字节。
句法: | msie_refresh |
---|---|
默认: |
msie_refresh off; |
语境: | http ,服务器 ,位置 |
启用或禁用发出刷新,而不是MSIE客户端的重定向。
句法: | open_file_cache open_file_cache |
---|---|
默认: |
open_file_cache off; |
语境: | http ,服务器 ,位置 |
配置可以存储的缓存:
- 打开文件描述符,其大小和修改时间;
- 有关目录存在的信息;
- 文件查找错误,如“找不到文件”,“不读权限”等等。
缓存错误应该由open_file_cache_errors指令单独启用。
该指令具有以下参数:
MAX T0>
- 设置缓存中的最大元素数;在缓存溢出时,最近最少使用的(LRU)元素被删除;
非活性 T0>
- 定义了一段时间,在此期间,如果元素在高速缓存中未被访问,则将其从该缓存中移除;默认为60秒;
关 T0>
- 禁用缓存。
例:
open_file_cache max=1000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on;
句法: | 上的open_file_cache_errors |
---|---|
默认: |
open_file_cache_errors off; |
语境: | http ,服务器 ,位置 |
通过open_file_cache启用或禁用文件查找错误的缓存。
句法: | open_file_cache_min_uses |
---|---|
默认: |
open_file_cache_min_uses 1; |
语境: | http ,服务器 ,位置 |
在open_file_cache指令的非活动
参数配置的时间段内设置文件访问的最小number
,这是文件描述符保持打开所需的缓存。
句法: | open_file_cache_valid |
---|---|
默认: |
open_file_cache_valid 60s; |
语境: | http ,服务器 ,位置 |
设置一个时间,之后应该验证open_file_cache元素。
句法: | output_buffers |
---|---|
默认: |
output_buffers 2 32k; |
语境: | http ,服务器 ,位置 |
设置用于从磁盘读取响应的缓冲区的number
和size
。
在版本1.9.5之前,默认值为1 32k。
句法: | port_in_redirect |
---|---|
默认: |
port_in_redirect on; |
语境: | http ,服务器 ,位置 |
启用或禁用在nginx发布的绝对重定向中指定端口。
在重定向中使用主服务器名称由server_name_in_redirect指令控制。
句法: | postpone_output |
---|---|
默认: |
postpone_output 1460; |
语境: | http ,服务器 ,位置 |
如果可能,客户端数据的传输将被推迟,直到nginx至少具有size
字节的数据发送。零值禁止延迟数据传输。
句法: | read_ahead |
---|---|
默认: |
read_ahead 0; |
语境: | http ,服务器 ,位置 |
设置使用文件时内核的预读量。
在Linux上,使用posix_fadvise(0,0,0,POSIX_FADV_SEQUENTIAL)
系统调用,因此size
参数被忽略。
在FreeBSD上,使用FreeBSD 9.0-CURRENT后支持的fcntl(O_READAHEAD,
size
)
系统调用。FreeBSD 7必须打补丁。
句法: | recursive_error_pages |
---|---|
默认: |
recursive_error_pages off; |
语境: | http ,服务器 ,位置 |
启用或禁用使用error_page指令执行多个重定向。这种重定向的数量为限制。
句法: | request_pool_size |
---|---|
默认: |
request_pool_size 4k; |
语境: | http ,服务器 |
允许精确调整每个请求的内存分配。该指令对性能影响最小,一般不应使用。
句法: | reset_timedout_connection |
---|---|
默认: |
reset_timedout_connection off; |
语境: | http ,服务器 ,位置 |
启用或禁用重置超时连接。复位执行如下。关闭套接字之前,设置SO_LINGER
选项,超时值为0。当套接字关闭时,TCP RST发送到客户端,并释放该套接字占用的所有内存。这有助于避免使用已填充缓冲区的已封闭套接字长时间处于FIN_WAIT1状态。
应该注意的是,超时保持连接正常关闭。
句法: | 解析器 |
---|---|
默认: | - |
语境: | http ,服务器 ,位置 |
配置用于将上游服务器名称解析为地址的名称服务器,例如:
resolver 127.0.0.1 [::1]:5353;
一个地址可以指定为一个域名或IP地址,一个可选端口(1.3.1,1.2.2)。如果未指定端口,则使用端口53。名称服务器以循环方式进行查询。
在版本1.1.7之前,只能配置一个名称服务器。从版本1.3.1和1.2.2开始支持使用IPv6地址指定名称服务器。
默认情况下,nginx会在解析时查找IPv4和IPv6地址。如果不希望查找IPv6地址,则可以指定ipv6 = off
参数。
从1.5.8版开始支持将名称解析为IPv6地址。
默认情况下,nginx使用响应的TTL值缓存答案。一个可选的有效
参数可以覆盖它:
resolver 127.0.0.1 [::1]:5353 valid=30s;
在版本1.1.9之前,调整缓存时间是不可能的,nginx总是缓存5分钟的答案。
为了防止DNS欺骗,建议在正确安全的可信本地网络中配置DNS服务器。
句法: | resolver_timeout |
---|---|
默认: |
resolver_timeout 30s; |
语境: | http ,服务器 ,位置 |
设置名称解析的超时时间,例如:
resolver_timeout 5s;
句法: | 根 |
---|---|
默认: |
root html; |
语境: | http ,服务器 ,位置 ,如果位置 |
设置请求的根目录。例如,使用以下配置
location /i/ { root /data/w3; }
将发送/data/w3/i/top.gif
文件以响应“/i/top.gif
”请求。
path
值可以包含变量,除了$ document_root
和$ realpath_root
。
通过仅向根
指令的值添加URI来构建文件的路径。如果必须修改URI,则应使用别名指令。
句法: | 满足 |
---|---|
默认: |
satisfy all; |
语境: | http ,服务器 ,位置 |
Allows access if all (all
) or at least one (any
) of the ngx_http_access_module, ngx_http_auth_basic_module, ngx_http_auth_request_module, or ngx_http_auth_jwt_module modules allow access.
例:
location / { satisfy any; allow 192.168.1.0/32; deny all; auth_basic "closed site"; auth_basic_user_file conf/htpasswd; }
句法: | send_lowat |
---|---|
默认: |
send_lowat 0; |
语境: | http ,服务器 ,位置 |
如果指令设置为非零值,则nginx将尝试使用kqueue方法的NOTE_LOWAT
标志或SO_SNDLOWAT
套接字选项。在这两种情况下都使用指定的size
。
该指令在Linux,Solaris和Windows上被忽略。
句法: | send_timeout |
---|---|
默认: |
send_timeout 60s; |
语境: | http ,服务器 ,位置 |
设置用于向客户端发送响应的超时。超时仅在两个连续的写入操作之间设置,而不是传输整个响应。如果客户端在这段时间内没有收到任何内容,则连接被关闭。
句法: | sendfile |
---|---|
默认: |
sendfile off; |
语境: | http ,服务器 ,位置 ,如果位置 |
启用或禁用使用sendfile()
。
从nginx 0.8.12和FreeBSD 5.2.1开始,可以使用aio为sendfile()
预加载数据:
location /video/ { sendfile on; tcp_nopush on; aio on; }
在此配置中,使用SF_NODISKIO
标志调用sendfile()
,这样会导致它不会在磁盘I / O上阻塞,而是回报数据不是在记忆中。然后,nginx通过读取一个字节来启动异步数据加载。在第一次读取时,FreeBSD内核将文件的前128K字节加载到内存中,尽管下一次读取将仅以16K块的形式加载数据。这可以使用read_ahead指令更改。
在1.7.11之前,可以使用aio sendfile;
启用预加载。
句法: | sendfile_max_chunk |
---|---|
默认: |
sendfile_max_chunk 0; |
语境: | http ,服务器 ,位置 |
当设置为非零值时,限制在单个sendfile()
调用中可传输的数据量。没有限制,一个快速连接可能完全抓住了工作进程。
句法: | 服务器 {...} |
---|---|
默认: | - |
语境: | HTTP T0> |
设置虚拟服务器的配置。基于IP(基于IP地址)和基于名称(基于“主机”请求头字段)虚拟服务器之间没有明确的区分。相反,listen指令描述了应该接受服务器连接的所有地址和端口,server_name指令列出所有服务器名称。“如何处理请求”文档中提供了示例配置。
句法: | server_name |
---|---|
默认: |
server_name ""; |
语境: | 服务器 T0> |
设置虚拟服务器的名称,例如:
server { server_name example.com www.example.com; }
名字成为主服务器名称。
服务器名称可以包含一个替换名称的第一个或最后一个部分的星号(“*
”)
server { server_name example.com *.example.com www.example.*; }
这样的名称称为通配符名称。
The first two of the names mentioned above can be combined in one:
server { server_name .example.com; }
It is also possible to use regular expressions in server names, preceding the name with a tilde (“~
”):
server { server_name www.example.com ~^www\d+\.example\.com$; }
正则表达式可以包含稍后可用于其他指令的捕获(0.7.40):
server { server_name ~^(www\.)?(.+)$; location / { root /sites/$2; } } server { server_name _; location / { root /sites/default; } }
在正则表达式中命名捕获创建变量(0.8.25),以后可以在其他指令中使用:
server { server_name ~^(www\.)?(?<domain>.+)$; location / { root /sites/$domain; } } server { server_name _; location / { root /sites/default; } }
如果指令的参数设置为“$ hostname
”(0.9.4),则插入机器的主机名。
也可以指定一个空的服务器名称(0.7.11):
server { server_name www.example.com ""; }
它允许此服务器处理请求,而不使用给定地址:端口对的“主机”头字段(而不是默认服务器)。这是默认设置。
在0.8.48之前,默认情况下使用机器的主机名。
在按名称搜索虚拟服务器时,如果名称与多个指定变体(例如通配符名称和正则表达式匹配)匹配,则将按照以下优先顺序选择第一个匹配变体:
- 确切的名字
- 以星号开头的最长通配符名称,例如“
*。example.com T0>”
- 以星号结尾的最长通配符名称,例如“
邮件。* T0>”
- 第一个匹配的正则表达式(按照出现在配置文件的顺序)
服务器名称的详细描述在单独的服务器名称文档中提供。
句法: | server_name_in_redirect |
---|---|
默认: |
server_name_in_redirect off; |
语境: | http ,服务器 ,位置 |
在nginx发布的绝对重定向中启用或禁用使用由server_name指令指定的主服务器名称。当禁用主服务器名称的使用时,将使用“主机”请求头域中的名称。如果该字段不存在,则使用服务器的IP地址。
在重定向中使用端口由port_in_redirect指令控制。
句法: | server_names_hash_bucket_size |
---|---|
默认: |
server_names_hash_bucket_size 32|64|128; |
语境: | HTTP T0> |
设置服务器名称哈希表的桶大小。默认值取决于处理器的高速缓存行的大小。设置散列表的细节在单独的文档中提供。
句法: | server_names_hash_max_size |
---|---|
默认: |
server_names_hash_max_size 512; |
语境: | HTTP T0> |
设置服务器名称哈希表的最大size
。设置散列表的细节在单独的文档中提供。
句法: | server_tokens |
---|---|
默认: |
server_tokens on; |
语境: | http ,服务器 ,位置 |
启用或禁用在错误页面和“服务器”响应标头字段中发布nginx版本。
build
参数(1.11.10)可以与nginx版本一起发出构建名称。
另外,作为商业订阅的一部分,从版本1.9.13开始,错误页面上的签名和“服务器”响应头域值可以使用string
显式设置与变量。空字符串禁止发出“服务器”字段。
句法: | tcp_nodelay |
---|---|
默认: |
tcp_nodelay on; |
语境: | http ,服务器 ,位置 |
启用或禁用使用TCP_NODELAY
选项。只有当连接转换为保持活动状态时,该选项才被使能。
句法: | tcp_nopush |
---|---|
默认: |
tcp_nopush off; |
语境: | http ,服务器 ,位置 |
启用或禁用在Linux上使用FreeBSD上的TCP_NOPUSH
套接字选项或TCP_CORK
套接字选项。仅当使用sendfile时,这些选项才被使能。启用该选项允许
- 在Linux和FreeBSD 4上,在一个数据包中发送响应头和文件的开头。*;
- 以完整数据包发送文件。
句法: | try_files try_files |
---|---|
默认: | - |
语境: | server ,location |
以指定的顺序检查文件的存在,并使用第一个找到的文件进行请求处理;该处理在当前上下文中执行。根据根和别名指令,从file
参数构建文件的路径。可以通过在名称的末尾指定斜杠来检查目录的存在,例如。 “ $ URI / T0>”。
如果没有找到任何文件,则会进行最后一个参数中指定的uri
的内部重定向。例如:
location /images/ { try_files $uri /images/default.gif; } location = /images/default.gif { expires 30s; }
最后一个参数也可以指向一个命名的位置,如下面的例子所示。从0.7.51版本开始,最后一个参数也可以是code
:
location / { try_files $uri $uri/index.html $uri.html =404; }
代理Mongrel的示例:
location / { try_files /system/maintenance.html $uri $uri/index.html $uri.html @mongrel; } location @mongrel { proxy_pass http://mongrel; }
Drupal / FastCGI示例:
location / { try_files $uri $uri/ @drupal; } location ~ \.php$ { try_files $uri @drupal; fastcgi_pass ...; fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param QUERY_STRING $args; ... other fastcgi_param's } location @drupal { fastcgi_pass ...; fastcgi_param SCRIPT_FILENAME /path/to/index.php; fastcgi_param SCRIPT_NAME /index.php; fastcgi_param QUERY_STRING q=$uri&$args; ... other fastcgi_param's }
在下面的例子中,
location / { try_files $uri $uri/ @drupal; }
try_files
指令相当于
location / { error_page 404 = @drupal; log_not_found off; }
和这里,
location ~ \.php$ { try_files $uri @drupal; fastcgi_pass ...; fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name; ... }
try_files
在将请求传递给FastCGI服务器之前检查PHP文件的存在。
Wordpress和Joomla的示例:
location / { try_files $uri $uri/ @wordpress; } location ~ \.php$ { try_files $uri @wordpress; fastcgi_pass ...; fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name; ... other fastcgi_param's } location @wordpress { fastcgi_pass ...; fastcgi_param SCRIPT_FILENAME /path/to/index.php; ... other fastcgi_param's }
句法: | 类型 {...} |
---|---|
默认: |
types { text/html html; image/gif gif; image/jpeg jpg; } |
语境: | http ,服务器 ,位置 |
将MIME类型的文件扩展名映射到响应。扩展名不区分大小写。几个扩展可以映射到一个类型,例如:
types { application/octet-stream bin exe dll; application/octet-stream deb; application/octet-stream dmg; }
一个足够完整的映射表与nginx在conf / mime.types
文件中一起分发。
要使特定位置为所有请求发出“应用程序/八位字节流
”MIME类型,可以使用以下配置:
location /download/ { types { } default_type application/octet-stream; }
句法: | types_hash_bucket_size |
---|---|
默认: |
types_hash_bucket_size 64; |
语境: | http ,服务器 ,位置 |
设置哈希表类型的桶大小。设置散列表的细节在单独的文档中提供。
在版本1.5.13之前,默认值取决于处理器的高速缓存行的大小。
句法: | types_hash_max_size |
---|---|
默认: |
types_hash_max_size 1024; |
语境: | http ,服务器 ,位置 |
设置哈希表类型的最大size
。设置散列表的细节在单独的文档中提供。
句法: | underscores_in_headers |
---|---|
默认: |
underscores_in_headers off; |
语境: | http ,服务器 |
启用或禁用在客户端请求头域中使用下划线。当禁用下划线的使用时,名称中包含下划线的请求头字段将被标记为无效,并受ignore_invalid_headers指令的约束。
如果在服务器级别指定了该指令,则仅在服务器为默认服务器时才使用该值。指定的值也适用于侦听相同地址和端口的所有虚拟服务器。
句法: | variables_hash_bucket_size |
---|---|
默认: |
variables_hash_bucket_size 64; |
语境: | HTTP T0> |
设置变量哈希表的桶大小。设置散列表的细节在单独的文档中提供。
句法: | variables_hash_max_size |
---|---|
默认: |
variables_hash_max_size 1024; |
语境: | HTTP T0> |
设置变量哈希表的最大size
。设置散列表的细节在单独的文档中提供。
在版本1.5.13之前,默认值为512。
Embedded Variables
ngx_http_core_module
模块支持名称与Apache Server变量匹配的嵌入式变量。首先,这些是表示客户端请求头字段的变量,例如$ http_user_agent
,$ http_cookie
等等。还有其他变量:
$ ARG _ T0>
name
- 请求行中的
name
的$ args T0>
- 请求行中的参数
$ binary_remote_addr T0>
- 客户端地址以二进制形式出现,值的长度始终为IPv4地址的4个字节或IPv6地址的16个字节
$ body_bytes_sent T0>
- 发送给客户端的字节数,不计算响应标头;该变量与
mod_log_config
Apache模块的“%B
”参数兼容 $ bytes_sent T0>
- 发送到客户端的字节数(1.3.8,1.2.5)
$连接 T0>
- 连接序列号(1.3.8,1.2.5)
$ connection_requests T0>
- 通过连接提出的当前请求数(1.3.8,1.2.5)
$ CONTENT_LENGTH T0>
- “Content-Length”请求头域
$ CONTENT_TYPE T0>
- “Content-Type”请求头域
name
Cookie$ DOCUMENT_ROOT T0>
- 根或别名指令当前请求的值
$ DOCUMENT_URI T0>
- 与
$ uri
相同 $宿主 T0>
- 按此顺序排列:主机名从请求行,或主机名从“主机”请求头字段,或服务器名称匹配请求
$主机名 T0>
- 主机名
$ HTTP _ T0>
name
- 任意请求头字段;变量名称的最后一部分是将字段名称转换为小写字母,并用下划线替换
$ HTTPS T0>
- “
on
”,如果连接以SSL模式运行,否则为空字符串 $ is_args T0>
- “
?
”如果请求行有参数,否则为空字符串 $ limit_rate T0>
- 设置此变量可实现响应速率限制;见limit_rate
$毫秒 T0>
- 当前时间以秒为单位的秒数(1.3.9,1.2.6)
$ nginx_version T0>
- nginx版本
$ PID T0>
- 工作进程的PID
$管 T0>
- “
p
”如果请求是流水线的,“。
”否则(1.3.12,1.2.7) $ proxy_protocol_addr T0>
- 来自PROXY协议头的客户端地址,否则为空字符串(1.5.12)
必须通过在listen指令中设置
proxy_protocol
参数来先前启用PROXY协议。 $ proxy_protocol_port T0>
- 客户端口从PROXY协议头,或空字符串(1.11.0)
必须通过在listen指令中设置
proxy_protocol
参数来先前启用PROXY协议。 $ QUERY_STRING T0>
- 与
$ args
相同 $ realpath_root T0>
- 对应于根或别名指令的当前请求的值的绝对路径名,所有符号链接都解析为实际路径
$ REMOTE_ADDR T0>
- 客户地址
$ REMOTE_PORT T0>
- 客户端口
$ REMOTE_USER T0>
- 用户名附带基本认证
$请求 T0>
- 完整的原始请求行
$ request_body T0>
- 请求机构
在proxy_pass,fastcgi_pass,uwsgi_pass和scgi_pass指令处理的位置,变量的值可用请求主体被读取到内存缓冲区。
$ REQUEST_BODY_FILE T0>
- 具有请求正文的临时文件的名称
在处理结束时,文件需要删除。要始终将请求体写入文件,需要启用client_body_in_file_only。当临时文件的名称以代理的请求或向FastCGI / uwsgi / SCGI服务器的请求传递时,传递请求体应由proxy_pass_request_body off,fastcgi_pass_request_body关闭,uwsgi_pass_request_body off或scgi_pass_request_body off指令。
$ request_completion T0>
- “
OK
”如果请求已经完成,否则为空字符串 $ REQUEST_FILENAME T0>
- 基于根或别名指令的当前请求的文件路径以及请求URI
$ REQUEST_ID T0>
- 从16个随机字节生成的唯一请求标识符,以十六进制(1.11.0)
$ request_length T0>
- 请求长度(包括请求行,头和请求体)(1.3.12,1.2.7)
$ REQUEST_METHOD T0>
- 请求方法,通常为“
GET
”或“POST
” $ REQUEST_TIME T0>
- 请求处理时间(以秒为单位),单位为毫秒(1.3.9,1.2.6);从客户端读取第一个字节后经过的时间
$ REQUEST_URI T0>
- 完整的原始请求URI(带参数)
$方案 T0>
- 请求方案“
http
”或“https
” $ sent_http _ T0>
name
- 任意响应头字段;变量名称的最后一部分是将字段名称转换为小写字母,并用下划线替换
$ sent_trailer _ T0>
name
- 响应结束时发送的任意字段(1.13.2);变量名称的最后一部分是将字段名称转换为小写字母,并用下划线替换
$ SERVER_ADDR T0>
- 接受请求的服务器的地址
计算此变量的值通常需要一个系统调用。为了避免系统调用,listen指令必须指定地址并使用
bind
参数。 $服务器名 T0>
- 接受请求的服务器的名称
$ SERVER_PORT T0>
- 接受请求的服务器端口
$ SERVER_PROTOCOL T0>
- 请求协议,通常为“
HTTP / 1.0
”,“HTTP / 1.1
”或“HTTP / 2.0” $状态 T0>
- 回应状态(1.3.2,1.2.2)
$ tcpinfo_rtt
,$ tcpinfo_rttvar
,$ tcpinfo_snd_cwnd
,$ tcpinfo_rcv_space
- 有关客户端TCP连接的信息;在支持
TCP_INFO
套接字选项的系统上可用 $ time_iso8601 T0>
- 当地时间采用ISO 8601标准格式(1.3.12,1.2.7)
$ time_local T0>
- 通用日志格式的本地时间(1.3.12,1.2.7)
$ URI T0>
- 正常化中的当前URI
$ uri
的值可以在请求处理期间改变,例如,当进行内部重定向或使用索引文件时。