user nginx ;
#用户
worker_processes 8;
#工作进程,根据硬件调整,大于等于cpu核数
error_log logs/nginx_error.log crit;
#错误日志
pid logs/nginx.pid;
#pid放置的位置
worker_rlimit_nofile 204800;
#指定进程可以打开的最大描述符
这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文
件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。
现在在linux 2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535。
这是因为nginx调度时分配请求到进程并不是那么的均衡,所以假如填写10240,总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误。
events
{
use epoll;
#使用epoll的I/O 模型
补充说明:
与apache相类,nginx针对不同的操作系统,有不同的事件模型
A)标准事件模型
Select、poll属于标准事件模型,如果当前系统不存在更有效的方法,nginx会选择select或poll
B)高效事件模型
Kqueue:使用于FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X.使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃。
Epoll:使用于Linux内核2.6版本及以后的系统。
/dev/poll:使用于Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。
Eventport:使用于Solaris 10. 为了防止出现内核崩溃的问题, 有必要安装安全补丁
worker_connections 204800;
#工作进程的最大连接数量,根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行
每个进程允许的最多连接数, 理论上每台nginx服务器的最大连接数为worker_processes*worker_connections
keepalive_timeout 60;
keepalive超时时间。
client_header_buffer_size 4k;
客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。
分页大小可以用命令getconf PAGESIZE 取得。
[root@web001 ~]# getconf PAGESIZE
4096
但也有client_header_buffer_size超过4k的情况,但是client_header_buffer_size该值必须设置为“系统分页大小”的整倍数。
open_file_cache max=65535 inactive=60s;
这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。
open_file_cache_valid 80s;
这个是指多长时间检查一次缓存的有效信息。
open_file_cache_min_uses 1;
open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http
{
include mime.types;
#设定mime类型,类型由mime.type文件定义
default_type application/octet-stream;
log_format main '$host $status [$time_local] $remote_addr [$time_local] $request_uri '
'"$http_referer" "$http_user_agent" "$http_x_forwarded_for" '
'$bytes_sent $request_time $sent_http_x_cache_hit';
log_format log404 '$status [$time_local] $remote_addr $host$request_uri $sent_http_location';
$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名称;
$time_local: 用来记录访问时间与时区;
$request: 用来记录请求的url与http协议;
$status: 用来记录请求状态;成功是200,
$body_bytes_s ent :记录发送给客户端文件主体内容大小;
$http_referer:用来记录从那个页面链接访问过来的;
$http_user_agent:记录客户毒啊浏览器的相关信息;
通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址;
access_log /dev/null;
#用了log_format指令设置了日志格式之后,需要用access_log指令指定日志文件的存放路径;
# access_log /usr/local/nginx/logs/access_log main;
server_names_hash_bucket_size 128;
#保存服务器名字的hash表是由指令server_names_hash_max_size 和server_names_hash_bucket_size所控制的。参数hash bucket size总是等于hash表的大小,并且是一路处理器缓存大小的倍数。在减少了在内存中的存取次数后,使在处理器中加速查找hash表键值成为可能。如果hash bucket size等于一路处理器缓存的大小,那么在查找键的时候,最坏的情况下在内存中查找的次数为2。第一次是确定存储单元的地址,第二次是在存储单元中查找键 值。因此,如果Nginx给出需要增大hash max size 或 hash bucket size的提示,那么首要的是增大前一个参数的大小.
client_header_buffer_size 4k;
客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。
large_client_header_buffers 8 128k;
客户请求头缓冲大小
nginx默认会用client_header_buffer_size这个buffer来读取header值,如果
header过大,它会使用large_client_header_buffers来读取
如果设置过小HTTP头/Cookie过大 会报400 错误nginx 400 bad request
求行如果超过buffer,就会报HTTP 414错误(URI Too Long)
nginx接受最长的HTTP头部大小必须比其中一个buffer大,否则就会报400的
HTTP错误(Bad Request)。
open_file_cache max 102400
使用字段:http, server, location 这个指令指定缓存是否启用,如果启用,将记录文件以下信息: ·打开的文件描述符,大小信息和修改时间. ·存在的目录信息. ·在搜索文件过程中的错误信息 --没有这个文件,无法正确读取,参考open_file_cache_errors指令选项:
·max -指定缓存的最大数目,如果缓存溢出,最长使用过的文件(LRU)将被移除
例: 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 on | off 默认值:open_file_cache_errors off 使用字段:http, server, location 这个指令指定是否在搜索一个文件是记录cache错误.
open_file_cache_min_uses
语法:open_file_cache_min_uses number 默认值:open_file_cache_min_uses 1 使用字段:http, server, location 这个指令指定了在open_file_cache指令无效的参数中一定的时间范围内可以使用的最小文件数,如 果使用更大的值,文件描述符在cache中总是打开状态.
open_file_cache_valid
语法:open_file_cache_valid time 默认值:open_file_cache_valid 60 使用字段:http, server, location 这个指令指定了何时需要检查open_file_cache中缓存项目的有效信息.
client_max_body_size 300m;
设定通过nginx上传文件的大小
sendfile on;
#sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,
对于普通应用,必须设为on。
如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。
tcp_nopush on;
此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用
proxy_connect_timeout 90;
#后端服务器连接的超时时间_发起握手等候响应超时时间
proxy_read_timeout 180;
#连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间)
proxy_send_timeout 180;
#后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
proxy_buffer_size 256k;
#设置从被代理服务器读取的第一部分应答的缓冲区大小,通常情况下这部分应答中包含一个小的应答头,默认情况下这个值的大小为指令proxy_buffers中指定的一个缓冲区的大小,不过可以将其设置为更小
proxy_buffers 4 256k;
#设置用于读取应答(来自被代理服务器)的缓冲区数目和大小,默认情况也为分页大小,根据操作系统的不同可能是4k或者8k
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
#设置在写入proxy_temp_path时数据的大小,预防一个工作进程在传递文件时阻塞太长
proxy_temp_path /data0/proxy_temp_dir;
#proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
#设置内存缓存空间大小为200MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为30GB。
keepalive_timeout 120;
keepalive超时时间。
tcp_nodelay on;
client_body_buffer_size 512k;
如果把它设置为比较大的数值,例如256k,那么,无论使用firefox还是IE浏览器,来提交任意小于256k的图片,都很正常。如果注释该指令,使用默认的client_body_buffer_size设置,也就是操作系统页面大小的两倍,8k或者16k,问题就出现了。
无论使用firefox4.0还是IE8.0,提交一个比较大,200k左右的图片,都返回500 Internal Server Error错误
proxy_intercept_errors on;
表示使nginx阻止HTTP应答代码为400或者更高的应答。
upstream img_relay {
server 127.0.0.1:8027;
server 127.0.0.1:8028;
server 127.0.0.1:8029;
hash $request_uri;
}
nginx的upstream目前支持4种方式的分配
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
upstream bakend {
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
}
2、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
例如:
upstream bakend {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
3、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backend {
server server1;
server server2;
fair;
}
4、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
upstream backend {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
tips:
upstream bakend{#定义负载均衡设备的Ip及设备状态
ip_hash;
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}
在需要使用负载均衡的server中增加
proxy_pass http://bakend/;
每个设备的状态设置为:
1.down表示单前的server暂时不参与负载
2.weight默认为1.weight越大,负载的权重就越大。
3.max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
nginx支持同时设置多组的负载均衡,用来给不用的server来使用。
client_body_in_file_only设置为On 可以讲client post过来的数据记录到文件中用来做debug
client_body_temp_path设置记录文件的目录 可以设置最多3层目录
location对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡
server
#配置虚拟机
{
listen 80;
#配置监听端口
server_name image.***.com;
#配置访问域名
location ~* \.(mp3|exe)$ {
#对以“mp3或exe”结尾的地址进行负载均衡
proxy_pass http://img_relay$request_uri;
#设置被代理服务器的端口或套接字,以及URL
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#以上三行,目的是将代理服务器收到的用户的信息传到真实服务器上
}
location /face {
if ($http_user_agent ~* "xnp") {
rewrite ^(.*)$ http://211.151.188.190:8080/face.jpg redirect;
}
proxy_pass http://img_relay$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
error_page 404 502 = @fetch;
}
location @fetch {
access_log /data/logs/face.log log404;
#设定本服务器的访问日志
rewrite ^(.*)$ http://211.151.188.190:8080/face.jpg redirect;
}
location /image {
if ($http_user_agent ~* "xnp") {
rewrite ^(.*)$ http://211.151.188.190:8080/face.jpg redirect;
}
proxy_pass http://img_relay$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
error_page 404 502 = @fetch;
}
location @fetch {
access_log /data/logs/image.log log404;
rewrite ^(.*)$ http://211.151.188.190:8080/face.jpg redirect;
}
}
server
{
listen 80;
server_name *.***.com *.***.cn;
location ~* \.(mp3|exe)$ {
proxy_pass http://img_relay$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
if ($http_user_agent ~* "xnp") {
rewrite ^(.*)$ http://i1.***img.com/help/noimg.gif redirect;
}
proxy_pass http://img_relay$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#error_page 404 http://i1.***img.com/help/noimg.gif;
error_page 404 502 = @fetch;
}
location @fetch {
access_log /data/logs/baijiaqi.log log404;
rewrite ^(.*)$ http://i1.***img.com/help/noimg.gif redirect;
}
#access_log off;
}
server
{
listen 80;
server_name *.***img.com;
location ~* \.(mp3|exe)$ {
proxy_pass http://img_relay$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
if ($http_user_agent ~* "xnp") {
rewrite ^(.*)$ http://i1.***img.com/help/noimg.gif;
}
proxy_pass http://img_relay$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#error_page 404 http://i1.***img.com/help/noimg.gif;
error_page 404 = @fetch;
}
#access_log off;
location @fetch {
access_log /data/logs/baijiaqi.log log404;
rewrite ^(.*)$ http://i1.***img.com/help/noimg.gif redirect;
}
}
server
{
listen 8080;
server_name ngx-ha.***img.com;
location / {
stub_status on;
access_log off;
}
}
server {
listen 80;
server_name imgsrc1.***.net;
root html;
}
server {
listen 80;
server_name ***.com w.***.com;
# access_log /usr/local/nginx/logs/access_log main;
location / {
rewrite ^(.*)$ http://www.***.com/ ;
}
}
server {
listen 80;
server_name *******.com w.*******.com;
# access_log /usr/local/nginx/logs/access_log main;
location / {
rewrite ^(.*)$ http://www.*******.com/;
}
}
server {
listen 80;
server_name ******.com;
# access_log /usr/local/nginx/logs/access_log main;
location / {
rewrite ^(.*)$ http://www.******.com/;
}
}
location /NginxStatus {
stub_status on;
access_log on;
auth_basic "NginxStatus";
auth_basic_user_file conf/htpasswd;
}
#设定查看Nginx状态的地址
location ~ /\.ht {
deny all;
}
#禁止访问.htxxx文件
}
注释:变量
Ngx_http_core_module模块支持内置变量,他们的名字和apache的内置变量是一致的。
首先是说明客户请求title中的行,例如$http_user_agent,$http_cookie等等。
此外还有其它的一些变量
$args此变量与请求行中的参数相等
$content_length等于请求行的“Content_Length”的值。
$content_type等同与请求头部的”Content_Type”的值
$document_root等同于当前请求的root指令指定的值
$document_uri与$uri一样
$host与请求头部中“Host”行指定的值或是request到达的server的名字(没有Host行)一样
$limit_rate允许限制的连接速率
$request_method等同于request的method,通常是“GET”或“POST”
$remote_addr客户端ip
$remote_port客户端port
$remote_user等同于用户名,由ngx_http_auth_basic_module认证
$request_filename当前请求的文件的路径名,由root或alias和URI request组合而成
$request_body_file
$request_uri含有参数的完整的初始URI
$query_string与$args一样
$sheeme http模式(http,https)尽在要求是评估例如
Rewrite ^(.+)$ $sheme://example.com$; Redirect;
$server_protocol等同于request的协议,使用“HTTP/或“HTTP/
$server_addr request到达的server的ip,一般获得此变量的值的目的是进行系统调用。为了避免系统调用,有必要在listen指令中指明ip,并使用bind参数。
$server_name请求到达的服务器名
$server_port请求到达的服务器的端口号
$uri等同于当前request中的URI,可不同于初始值,例如内部重定向时或使用index
Nginx处理HTTP的核心功能模块
指令
aio
语法:aio [on|off|sendfile]
默认值:off
使用字段:http, server, location
这个指令在Linux内核2.6.1922以上版本可以使用,对于Linux内核,这个指令需要配合directio指令,使用这个指令将自动关闭sendfile支持。
location /video {
aio on;
directio 512;
output_buffers 1 128k;
}
在FreeBSD5.2.1之前版本和Nginx0.8.12,你必须手工关闭sendfile:
location /video {
aio on;
sendfile off;
output_buffers 1 128k;
}
同样也可以和sendfile一起使用(FreeBSD5.2.1和Nginx0.8.12):
location /video {
aio sendfile;
sendfile on;
tcp_nopush on;
}
alias
语法:alias file-path|directory-path;
默认值:no
使用字段:location
这个指令为一个location指定一个路径,注意它可能类似于root,但是document root没有改变,请求只是使用了别名目录的文件。这个location自身为“丢弃的”,具体请看下面的例子:
location /i/ {
alias /spool/w3/images/;
}
上个例子总,请求”/i/top.gif”将返回这个文件: ”/spool/w3/images/top.gif”。正如你所看到的,uri中location后面的部分会追加到这个目录后面,而location自身是“丢弃的”,如果使用root指令的话会进行完整的追加,如上例中,如果使用root指令则返回:”/spool/w3/images/i/top.gif”
Alias同样可以用于带正则表达式的location,如:
location ~ ^/download/(.*)$ {
alias /home/website/files/$1;
}
请求”/download/book.pdf”将返回”/home/website/files/book.pdf”。同样注意,uri中location后面的部分会追加到这个目录后面。
同样,也可以在别名目录字段中使用变量。
chunked_transfer_encoding
语法:chunked_transfer_encoding on|off;
默认值:on
使用字段:http, server, location
指定是否在响应时启用chunked编码(只能使用于HTTP1.1版本以上的连接)。
client_body_in_file_only
语法:client_body_in_file_only on|off
默认值:off
使用字段:http, server, location
这个指令始终存储一个连接请求实体到一个文件即使它只有0字节。
注意:如果这个指令打开,那么一个连接请求完成后,所存储的文件并不会删除。
这个指令可以用于debug调试和嵌入式Perl模块中的$r→request_body_file方法。
client_body_in_single_buffer
语法:client_body_in_single_buffer
默认值:off
使用字段:http, server, location
这个指令(0.7.58版本)指定是否将客户端连接请求完整的放入一个缓冲区,当使用变量$request_body时推荐使用这个指令以减少复制操作。
如果无法将一个请求放入单个缓冲区,将会被放入磁盘。
client_body_buffer_size
语法:client_body_buffer_size the_size
默认值:8k/16k
使用字段:http, server, location
这个指令可以指定连接请求实体的缓冲区大小。
如果连接请求超过缓存区指定的值,那么这些请求实体的整体或部分将尝试写入一个临时文件。
默认值为两个内存分页大小值,根据平台的不同,可能是8k或16k。
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
client_body_timeout
语法:client_body_timeout time
默认值:60
使用字段:http, server, location
指令指定读取请求实体的超时时间。
这里的超时是指一个请求实体没有进入读取步骤,如果连接超过这个时间而客户端没有任何响应,Nginx将返回一个”Request time out” (408)错误
client_header_buffer_size
语法:client_header_buffer_size size
默认值:1k
使用字段:http, server
指令指定客户端请求头部的缓冲区大小
绝大多数情况下一个请求头不会大于1k
不过如果有来自于wap客户端的较大的cookie它可能会大于1k,Nginx将分配给它一个更大的缓冲区,这个值可以在large_client_header_buffers里面设置。
client_header_timeout
语法:client_header_timeout time
默认值:60
使用字段:http, server
指令指定读取客户端请求头标题的超时时间。
这里的超时是指一个请求头没有进入读取步骤,如果连接超过这个时间而客户端没有任何响应,Nginx将返回一个”Request time out” (408)错误。
client_max_body_size
语法:client_max_body_size size
默认值:client_max_body_size 1m
使用字段:http, server, location
指令指定允许客户端连接的最大请求实体大小,它出现在请求头部的Content-Length字段。
如果请求大于指定的值,客户端将收到一个”Request Entity Too Large” (413)错误。
记住,浏览器并不知道怎样显示这个错误。
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
这个参数指定在读取文件大小大于指定值的文件时使用O_DIRECT(FreeBSD, Linux),F_NOCACHE(Mac OS X)或者调用directio()函数(Solaris),当一个请求用到这个参数时会禁用sendfile,通常这个参数用于大文件。
directio 4m;
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;
)
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”(0.7.34)。
•
exact:精确匹配
•
before:文件修改时间应小于请求头中的”If-Modified-Since”时间
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;
}
keepalive_timeout
语法:keepalive_timeout [ time ] [ time ]
默认值:keepalive_timeout 75
使用字段:http, server, location
参数的第一个值指定了客户端与服务器长连接的超时时间,超过这个时间,服务器将关闭连接。
参数的第二个值(可选)指定了应答头中Keep-Alive: timeout=time的time值,这个值可以使一些浏览器知道什么时候关闭连接,以便服务器不用重复关闭,如果不指定这个参数,nginx不会在应 答头中发送Keep-Alive信息。(但这并不是指怎样将一个连接“Keep-Alive”)
参数的这两个值可以不相同。
下面列出了一些服务器如何处理包含Keep-Alive的应答头:
•
MSIE和Opera将Keep-Alive: timeout=N头忽略。
•
MSIE保持一个连接大约60-65秒,然后发送一个TCP RST。
•
Opera将一直保持一个连接处于活动状态。
•
Mozilla将一个连接在N的基础上增加大约1-10秒。
•
Konqueror保持一个连接大约N秒。
keepalive_requests
语法:keepalive_requests n
默认值:keepalive_requests 100
使用字段:http, server, location
服务器保持长连接的请求数。
large_client_header_buffers
语法:large_client_header_buffers number size
默认值:large_client_header_buffers 4 4k/8k
使用字段:http, server
指定客户端一些比较大的请求头使用的缓冲区数量和大小。
请求字段不能大于一个缓冲区大小,如果客户端发送一个比较大的头,nginx将返回”Request URI too large” (414)
同样,请求的头部最长字段不能大于一个缓冲区,否则服务器将返回”Bad request” (400)。
缓冲区只在需求时分开。
默认一个缓冲区大小为操作系统中分页文件大小,通常是4k或8k,如果一个连接请求最终将状态转换为keep-alive,它所占用的缓冲区将被释放。
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;
}
limit_rate
语法:limit_rate speed
默认值:no
使用字段:http, server, location, location中的if字段
限制将应答传送到客户端的速度,单位为字节/秒,限制仅对一个连接有效,即如果一个客户端打开2个连接,则它的速度是这个值乘以二。
由于一些不同的状况,可能要在server字段来限制部分连接的速度,那么这个参数并不适用,不过你可以选择设置$limit_rate变量的值来达到目的:
server {
if ($slow) {
set $limit_rate 4k;
}
}
同样可以通过设置X-Accel-Limit-Rate头(NginxXSendfile)来控制proxy_pass返回的应答(http代理模块)。并且不借助X-Accel-Redirect头来完成。
limit_rate_after
语法:limit_rate_after time
默认值:limit_rate_after 1m
使用字段:http, server, location, location中的if字段
在应答一部分被传递后限制速度:
limit_rate_after 1m;
limit_rate 100k;
listen
语法(0.7.x):listen address:port [ default [ backlog=num | rcvbuf=size | sndbuf=size | accept_filter=filter | deferred | bind | ssl ] ]
语法(0.8.x):listen address:port [ default_server [ 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中默认使用IPv4 to IPv6视图地址格式使IPv6的socket同样对应IPv4的链路,例如, ::ffff:<IPv4地址格式>,示例, ::ffff:192.168.0.27对应192.168.0.27到一个IPv6地址。
如果你在listen指令中启用[::]:80IPv6地址格式监听80端口,在linux中默认它也会监听IPv4端口,也就意味着IPv4和IPv6的地址都会被监听,如果你在另外一个指令中指定IPv4的地址,你将会在重启nginx时得到一个“already bind address”错误。
在linux中,如果你想讲IPv4和IPv6地址分开监听,可以通过内核参数:net.ipv6.bindv6only,默认这个值是0。通过sysctl将这个值设置为1。
注意:nginx实例(进程)在你修改上述参数之后可能会继续IPv4链路的传输,你可能需要一个新的设置为IPv6和IPv4包处理方法,请修改nginx配置文件并且重启nginx。
如果在其他server块(vhost)中你想通过下面这个指令来监听IPv4的地址:
listen [::]:80;
监听IPv4的地址将会失败,解决这个问题的方法是在listen中,当使用IPv6地址时增加ipv6only=on选项,并且在同一个server块中写一条监听IPv4地址的指令:
修改配置文件应该是在你修改内核运行参数以后进行。
listen [::]:80 ipv6only=on; # 只监听IPv6链路
listen 80; # 这条指令将监听IPv4链路
在FreeBSD中默认是将IPv4和IPv6分离监听的,这样listen [::]:80仅监听IPv6的链路,如果你想同时进行IPv4地址的监听你可能需要另外写一条指令。
通过使用default ipv6only=on选项可以在listen指令中指定仅监听IPv6地址,这样在这个server块中就可以指定IPv6监听地址,其他server块中同样可以指定IPv4地址:
listen [2a02:750:5::123]:80;
listen [::]:80 default ipv6only=on;
如果只有ip地址指定,则默认端口为80。
如果指令有default参数,那么这个server块将是通过“地址:端口”来进行访问的默认服务器,这对于你想为那些不匹配server_name指 令中的主机名指定默认server块的虚拟主机(基于域名)非常有用,如果没有指令带有default参数,那么默认服务器将使用第一个server块。
listen允许一些不同的参数,即系统调用listen(2)和bind(2)中指定的参数,这些参数必须用在default参数之后:
1.
backlog=num – 指定调用listen(2)时backlog的值,默认为-1。
2.
rcvbuf=size – 为正在监听的端口指定SO_RCVBUF。
3.
sndbuf=size – 为正在监听的端口指定SO_SNDBUF。
4.
accept_filter=filter – 指定accept-filter。
o
仅用于FreeBSD,可以有两个过滤器,dataready与httcodeady,仅在最终版本的FreeBSD(FreeBSD: 6.0, 5.4-STABLE与4.11-STABLE)上,为他们发送-HUP信号可能会改变accept-filter。
5.
deferred – 在linux系统上延迟accept(2)调用并使用一个辅助的参数: TCP_DEFER_ACCEPT。
6.
bind – 将bind(2)分开调用。
o
主要指这里的“地址:端口”,实际上如果定义了不同的指令监听同一个端口,但是 每个不同的地址和某条指令均监听为这个端口的所有地址(*:port),那么nginx只将bind(2)调用于*:port。这种情况下通过系统调用 getsockname()确定哪个地址上有连接到达,但是如果使用了parameters backlog, rcvbuf, sndbuf, accept_filter或deferred这些参数,那么将总是将这个“地址:端口”分开调用。
7.
ssl – 参数(0.7.14)不将listen(2)和bind(2)系统调用关联。
o
被指定这个参数的listen将被允许工作在SSL模式,这将允许服务器同时工作在HTTP和HTTPS两种协议下,例如:
listen 80;
listen 443 default ssl;
一个使用这些参数的完整例子:
listen 127.0.0.1 default accept_filter=dataready backlog=1024;
0.8.21版本以后nginx可以监听unix套接口:
listen unix:/tmp/nginx1.sock;
location
语法:location [=|~|~*|^~|@] /uri/ { … }
默认值:no
使用字段:server
这个参数根据URI的不同需求来进行配置,可以使用字符串与正则表达式匹配,如果要使用正则表达式,你必须指定下列前缀:
1.
~* 不区分大小写。
2.
~ 区分大小写。
要确定该指令匹配特定的查询,程序将首先对字符串进行匹配,字符串匹配将作为查询的开始,最确切的匹配将被使用。然后,正则表达式的匹配查询开始,匹配查询的第一个正则表达式找到后会停止搜索,如果没有找到正则表达式,将使用字符串的搜索结果。
在一些操作系统,如Mac OS X和Cygwin,字符串将通过不区分大小写的方式完成匹配(0.7.7),但是,比较仅限于单字节的语言环境。
正则表达式可以包含捕获(0.7.40),并用于其它指令中。
可以使用“^~”标记禁止在字符串匹配后检查正则表达式,如果最确切的匹配location有这个标记,那么正则表达式不会被检查。
使用“=”标记可以在URI和location之间定义精确的匹配,在精确匹配完成后并不进行额外的搜索,例如有请求“/”发生,则可以使用“location = /”来加速这个处理。
即使没有“=”和“^~”标记,精确的匹配location在找到后同样会停止查询。
下面是各种查询方式的总结:
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结构时可能会将配置文件变的复杂并且产生一些比较意外的结果。
标记“@”指定一个命名的location,这种location并不会在正常请求中执行,它们仅使用在内部重定向请求中。(查看error_page和try_files)
log_not_found
语法:log_not_found [on|off]
默认值:log_not_found on
使用字段:http, server, location
指令指定是否将一些文件没有找到的错误信息写入error_log指定的文件中。
log_subrequest
语法:log_subrequest [on|off]
默认值:log_subrequest off
使用字段:http, server, location
指令指定是否将一些经过rewrite rules和/或SSI requests的子请求日志写入access_log指定的文件中。
msie_padding
语法:msie_padding [on|off]
默认值:msie_padding on
使用字段:http, server, location
指令指定开启或关闭MSIE浏览器和chrome浏览器(0.8.25+)的msie_padding特征,当这个功能开启,nginx将为响应实体分配最小512字节,以便响应大于或等于400的状态代码。
指令预防在MSIE和chrome浏览器中激活“友好的”HTTP错误页面,以便不在服务器端隐藏更多的错误信息。
msie_refresh
语法: msie_refresh [on|off]
默认值:msie_refresh off
使用字段:http, server, location
指令允许或拒绝为MSIE发布一个refresh而不是做一次redirect
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;
open_file_cache_errors
语法:open_file_cache_errors on | off
默认值:open_file_cache_errors off
使用字段:http, server, location
这个指令指定是否在搜索一个文件是记录cache错误。
open_file_cache_min_uses
语法:open_file_cache_min_uses number
默认值:open_file_cache_min_uses 1
使用字段:http, server, location
这个指令指定了在open_file_cache指令无效的参数中一定的时间范围内可以使用的最小文件数,如果使用更大的值,文件描述符在cache中总是打开状态。
open_file_cache_valid
语法:open_file_cache_valid time
默认值:open_file_cache_valid 60
使用字段:http, server, location
这个指令指定了何时需要检查open_file_cache中缓存项目的有效信息。
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。
port_in_redirect
语法:port_in_redirect [ on|off ]
默认值:port_in_redirect on
使用字段:http, server, location
这个指令指定是否在让nginx在重定向操作中对端口进行操作。
如果这个指令设置为off,在重定向的请求中nginx不会在url中添加端口。
post_action
语法:post_action [ uri|off ]
默认值:post_action off
使用字段:http, server, location, location中的if字段
为当前完成请求的子请求定义一个URI。
location /protected_files {
internal;
proxy_pass http://127.0.0.2;
post_action /protected_done;
}
# 发送post_action 请求到FastCGI后端进行登录验证。
location /protected_done {
internal;
fastcgi_pass 127.0.0.1:9000;
}
recursive_error_pages
语法:recursive_error_pages [on|off]
默认值:recursive_error_pages off
使用字段:http, server, location
recursive_error_pages指定启用除第一条error_page指令以外其他的error_page。
resolver
语法:resolver address
默认值:no
使用字段:http, server, location
指定DNS服务器地址,如:
resolver 127.0.0.1;
resolver_timeout
语法:resolver_timeout time
默认值:30s
使用字段:http, server, location
解析超时时间。如:
resolver_timeout 5s;
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指令。
satisfy
语法: satisfy [ all | any ]
默认值: satisfy all
使用字段:http, server, location
可用版本: ≥ 0.6.25
如果在一个字段中同时使用了Access模块和Auth Basic模块的指令,可以使用这个指令确定一种验证方式:
•
all - 必须同时匹配Access和Auth Basic中指令指定的权限。
•
any - 具有Access 或 Auth Basic指令任一权限即可通过匹配
location / {
satisfy any;
allow 192.168.1.0/32;
deny all;
auth_basic "closed site";
auth_basic_user_file conf/htpasswd;
}
satisfy_any
语法:satisfy_any [ on|off ]
默认值:satisfy_any off
使用字段:location
0.6.25版本以后请使用satisfy
send_timeout
语法:send_timeout the time
默认值:send_timeout 60
使用字段:http, server, location
指令指定了发送给客户端应答后的超时时间,Timeout是指没有进入完整established状态,只完成了两次握手,如果超过这个时间客户端没有任何响应,nginx将关闭连接。
sendfile
语法:sendfile [ on|off ]
默认值:sendfile off
使用字段:http, server, location
是否启用sendfile()函数。
server
语法:server {…}
默认值:no
使用字段:http
server字段包含虚拟主机的配置。
没有明确的机制来分开基于域名(请求中的主机头)和基于IP的虚拟主机。
可以通过listen指令来指定必须连接到这个server块的所有地址和端口,并且在server_name指令中可以指定所有的域名。
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$;
}
0.7.12版本以后已经可以支持空服务器名,以处理那些没有主机头的请求,但是请注意,大多数的浏览器会为请求增加一个“Host”头,如果其连接包含IP,请通过listen指令给他指定一个默认监听的server块。
server {
server_name "";
}
0.8.25版本以后可以在server_name中使用命名的捕获:
server {
server_name ~^(www\.)?(?<domain>.+)$;
root /sites/$domain;
}
一些老的PCRE版本在使用此语法的时候可能会引起部分问题,可以尝试以下语法修复:
server {
server_name ~^(www\.)?(?P<domain>.+)$;
root /sites/$domain;
}
0.9.4版本(含)以后,$hostname变量可以作为server_name的参数:
server {
server_name $hostname;
}
server_name_in_redirect
语法:server_name_in_redirect on|off
默认值:server_name_in_redirect on
使用字段:http, server, location
如果这个指令打开,nginx将使用server_name指定的基本服务器名作为重定向地址,如果关闭,nginx将使用请求中的主机头。
注意:如果一个header中的Location字段来自一个上游代理服务器(例如通过proxy_pass),可能不并不仅仅需要这个指令,事实上,它会被忽略,如果你看到返回的上游服务器的服务器名没有经过重写,你需要使用proxy_redirect来重写上游服务器提供的服务器名称,例如:proxy_redirect http://some.upstream.url/ /,它将”/“,这是一个相对路径
server_names_hash_max_size
语法:server_names_hash_max_size number
默认值:server_names_hash_max_size 512
使用字段:http
服务器名称哈希表的最大值,更多信息请参考nginx部分优化。
server_names_hash_bucket_size
语法:server_names_hash_bucket_size number
默认值:server_names_hash_bucket_size 32/64/128
使用字段:http
服务器名称哈希表每个页框的大小,这个指令的默认值依赖于cpu缓存。更多信息请参考nginx部分优化。
server_tokens
语法:server_tokens on|off
默认值:server_tokens on
使用字段:http, server, location
是否在错误页面和服务器头中输出nginx版本信息。
tcp_nodelay
语法:tcp_nodelay [on|off]
默认值:tcp_nodelay on
使用字段:http, server, location
这个指令指定是否使用socket的TCP_NODELAY选项,这个选项只对keep-alive连接有效。
点击这里了解更多关于TCP_NODELAY选项的信息。
tcp_nopush
语法:tcp_nopush [on|off]
默认值:tcp_nopush off
使用字段:http, server, location
这个指令指定是否使用socket的TCP_NOPUSH(FreeBSD)或TCP_CORK(linux)选项,这个选项只在使用sendfile时有效。
设置这个选项的将导致nginx试图将它的HTTP应答头封装到一个包中。
点击这里查看关于TCP_NOPUSH和TCP_CORK选项的更多信息。
try_files
语法:try_files path1 [path2] uri
默认值:none
使用字段:server, location
可用版本:0.7.27
按照指定的顺序检查存在的文件,并且返回第一个找到的结果,尾部跟随一个目录名,如果所有的文件都没有找到,那么将启用最后一个参数命名的内部重定向,最 后一个参数所指定的命名location必须被设置,否则将产生一个内部错误。不像rewrite,如果$args变量并不会自动保留,如果你需要保留请 求参数,请参照如下配置:
try_files $uri $uri/ /index.php?q=$uri&$args;
例(在代理Mongrel时使用):
try_files /system/maintenance.html $uri $uri/index.html $uri.html @mongrel;
location @mongrel {
proxy_pass http://mongrel;
}
在Drupal / FastCGI中使用
# for drupal 6:
try_files $uri $uri/ @drupal;
# for drupal 7:
try_files $uri $uri/ /index.php?q=$request_uri;
# only needed for Drupal 6 (或者你需要一个命名的location)
location @drupal {
rewrite ^ /index.php?q=$uri last; # for drupal 6
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:8888;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # if not already defined in the fastcgi_params file
# any other specific fastcgi_params
}
下面这个例子中,指令try_files:
location / {
try_files $uri $uri/ @drupal;
}
相当于这个指令:
location / {
error_page 404 = @drupal;
log_not_found off;
}
或者这个:
if (-e $request_filename) {
rewrite ^ /index.php?q=$uri last;
}
try_files基本上是一个对检查是否存在mod_rewrite样式的文件(类似于/directory)的替换,它比if的效率更高,参考IfIsEvil。
在Wordcodess和Joomla中使用:
# wordcodess (不使用WP Super Cache) - 示例 1
try_files $uri $uri/ /index.php?q=$uri&$args;
# wordcodess (不使用WP Super Cache) - 示例 2 (实际上并不需要"q"参数)
try_files $uri $uri/ /index.php;
# joomla
try_files $uri $uri/ /index.php?q=$uri&$args;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:8888;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 如果在fastcgi_params文件中没有定义
# 其他一些指定的fastcgi_params.
}
WP Super Cache需要成堆的静态文件检查,这里不对其进行讨论。
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;
}
underscores_in_headers
语法:underscores_in_headers on|off
默认值:off
使用字段:http, server
是否允许在header的字段中带下划线。
变量
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
请求中的Host字段,如果请求中的Host字段不可用,则为服务器处理请求的服务器名称。
当Host字段不存在,或者为空值时,$host变量的值可能和$http_host的值不相同
$hostname
gethostname返回的机器名称。
$is_args
如果$args设置,值为”?”,否则为”“。
$limit_rate
这个变量可以限制连接速率。
$nginx_version
当前运行的nginx版本号。
$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
如果请求成功,值为”OK”,如果请求未完成或者请求不是一个范围请求的最后一部分,则为空。
$request_method
这个变量是客户端请求的动作,通常为GET或POST。
包括0.8.20及之前的版本中,这个变量总为main request中的动作,如果当前请求是一个子请求,并不使用这个当前请求的动作。
$request_uri
这个变量等于包含一些客户端请求参数的原始URI,它无法修改,请查看$uri更改或重写URI,不包含主机名,例如:”/foo/bar.php?arg=baz”。
$scheme
HTTP方法(如http,https)。按需使用,例:
rewrite ^ $scheme://example.com$uri redirect;
$server_addr
服务器地址,在完成一次系统调用后可以确定这个值,如果要绕开系统调用,则必须在listen中指定地址并且使用bind参数。
$server_name
服务器名称。
$server_port
请求到达服务器的端口号。
$server_protocol
请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$uri
请求中的当前URI(不带请求参数,参数位于$args),可以不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改,$uri不包含主机名,如”/foo/bar.html”。