Server 节点

error_log

nginx 的错误日志。

语法:error_log file [level];

file 除了在物理机上的方位,还能够运用syslog:memory: 装备。

比方 error_log syslog:server=192.168.1.1:1234 debug;,更多变量可看 http://nginx.org/en/docs/syslog.html 官网文档。

支撑的日志等级:debug, info, notice, warn, error, crit, alert, emerg,越往后越严重。设置 error 等级的日志会接收 error, crit, alert, emerg 等级的日志。

示例:

server {
        error_log /path/to/log debug;
	}

access_log

恳求拜访日志。

语法:access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];

当然也能够封闭其时装备:access_log off;

  • path 表明指定日志寄存方位,当然,这个也能够运用 syslog:memory: 装备。
  • format 表明日志格局即日志中记载的内容
  • buffer 用于指定日志写入时的缓存巨细,默许 64k
  • gzip 日志写入前先紧缩。紧缩率能够指定,从1到9数值越大紧缩比越高,一同紧缩的速度也越慢,默许1
  • flush 设置缓存的时刻,假如超越flush指定的时刻,缓存中的内容将被清空
  • if 判别条件,假如指定的条件核算为0或空字符串,那么该恳求不会被写入日志

设置 buffer 的目的,是为了避免高频对磁盘进行读写操作,即暂时先不将日志写入磁盘,而是存入内存中,等达到了设置缓存巨细之后再一次性写入,注意 flush 指令是和 buffer 一同运用的,即指定 buffer=size 之后,假如超越 flush 指令设定的时刻仍然未达到缓存区巨细,则也会被写入到磁盘,没有 buffer 而只要 flush 则会报错。

format 假如未装备的话默许运用 combined,当然假如想指定格局的话能够在 log_format 中指定,具体可参数上一篇。

client_header_buffer_size

设置恳求行+恳求头的巨细,假如恳求超越其时装备巨细,则运用 large_client_header_buffers 装备,假如仍是超越 large_client_header_buffers 装备巨细,则回来 414 状况码。

语法:client_header_buffer_size size;
默许值:client_header_buffer_size 1k;

large_client_header_buffers

指定客户端恳求中较大的消息头的缓存最大数量和巨细。

语法:large_client_header_buffers number size;
默许值:large_client_header_buffers 4 8k;

client_max_body_size

设置客户端恳求服务器最大答应巨细,假如需求上传大文件的话,则需求修正其时的装备项。

语法:client_max_body_size size;
默许值:client_max_body_size 1m;

client_body_buffer_size

设置客户端恳求正文的 buffer 巨细。假如超越 buffer 的巨细的话,恳求正文就会放置在暂时文件其时,引起体系的 IO。

语法:client_body_buffer_size size;
默许值:client_body_buffer_size 8k|16k;

在 x86, 其他 32 位、x86-64 体系上默许是 8k,64 位体系上默许是 16K。

connection_pool_size

设置每个衔接的内容分配,对功能影响小,一般不建议运用。

语法:connection_pool_size size;
默许值:connection_pool_size 256|512;

32位体系上是256字节,64位上是512字节。

limit_conn_zone

界说了一个会话状况存储区域,里面记载会话状况的信息

语法: limit_conn_zone key zone=name:size;

key 能够是变量、文本和变量文本的组合,后边的衔接数量便是经过其时的 key 来判别的。

当信息超出 size 的巨细的话,会直接回来 limit_conn_status 装备的状况码信息。

示例:

limit_conn_zone $binary_remote_addr zone=addr:10m;

(客户端的 IP 地址)remoteaddr变量的长度为7字节到15字节,而存储状况在32位平台中占用32字节或64字节,在64位平台中占用64字节。remote_addr变量的长度为7字节到15字节,而存储状况在32位平台中占用32字节或64字节,在64位平台中占用64字节。binary_remote_addr变量的长度是固定的4字节,存储状况在32位平台中占用32字节或64字节,在64位平台中占用64字节。

limit_conn

约束最大衔接数。

语法:limit_conn zone number;

示例:limit_conn addr 1;

配合上面的 limit_conn_zone 运用,衔接数经过 key 来判别。超出约束的衔接直接回来 limit_conn_status 装备的状况码信息。

limit_req_zone

界说了一个会话状况存储区域,里面记载会话状况的信息。

语法:limit_req_zone key zone=name:size rate=rate [sync];

参数意思和上面 limit_conn_zone 相同,rate 是约束时刻内能处理多少个恳求,比方 30r/s 便是每秒只能处理 30 个恳求,超出的恳求直接回绝。 r/m 便是每分钟最多处理多少个恳求。

当存储空间耗尽的时分,假如需求记载新的值,那么就会经过 LRU 算法移除旧的变量来腾出空间,假如这样腾出来的空间仍是不足以接纳新的记载值,那么 nginx 就会回来状况码 503 (Service Temporarily Unavailable)。此外,为了防止内存耗尽,nginx 每次创立一个新记载值的时分就会清理掉两个 60 秒内没被运用过的旧记载值。

示例:limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;

limit_req

语法:limit_req zone=name [burst=number] [nodelay | delay=number];

装备 limit_req_zone 运用。

示例:limit_req zone=mylimit

便是约束每秒只能处理 10 个恳求了。

burst 参数则是设置突发恳求的恳求数,当达到约束恳求数,则会将恳求放置到行列当中,超出 burst 装备的恳求数则会回绝。

nodelay 装备是超出恳求直接回来回绝不等待。

delay 是分段线速。比方装备了 rate=10r/s burst=14 delay = 5,那么每秒处理完了 10 个恳求,后边还能处理 14 个突发恳求,其他 14 个突发恳求分为 5 个插槽行列和 9 个缓冲行列,插槽行列的恳求会立马被处理,也便是能够立马处理 10 + 5 个恳求,后边的缓冲行列会被 10 r/s 匀速处理,只要当缓冲行列中的恳求处理完毕后,插槽行列的恳求才会填充回去。

limit_rate

约束客户端速率。

语法:limit_rate rate;
默许:limit_rate 0;

示例:limit_rate 4k;

限速是根据客户端衔接来限速的,当客户端敞开两个衔接,那么每个衔接限速 4k。

它还能够配合变量来动态限速:

map $date_local $limit_rate_time {
    default 4K;
    ~(00:|01:|02:|03:|04:|05:|06:|07:).*:.* 16K;
    ~(08:|12:|13:|18:).*:.* 8K;
    ~(19:|20:|21:|22:|23:).*:.* 16K;
}
limit_rate $limit_rate_time

limit_rate_after

传输多少内容后再限速。

语法:limit_rate_after size;
默许:limit_rate_after 0;

示例:limit_rate_after 500k;

default_type

设置默许的 MIME 类型。

语法:default_type mime-type;
默许值:default_type text/plain;

有时分咱们不想浏览器直接播映文件,想直接下载文件,这时分咱们能够装备成 default_type application/octet-stream;,只要匹配到相应规矩的时分就会下载文件。

allow

拜访操控。答应拜访指定规矩

语法:allow address | CIDR | unix: | all;

deny

拜访操控。回绝拜访指定规矩

语法:deny address | CIDR | unix: | all;

示例:deny 192.168.1.1;

add_header

将字段增加到恳求头。

语法:add_header name value [always];

条件是响应代码等于 200、201 (1.3.10)、204、206、301、302、303、304、307 (1.1.16、1.0.13) 或 308 (1.13) .0)。参数值能够包括变量。

假如指定了 always(1.7.5)参数,则不管响应代码怎么,都会增加到恳求头。

proxy_set_body

修正发送给客户端 body 的内容。能够是文本、变量及其组合。

语法:proxy_set_body value;

proxy_set_header

答应重新界说或增加字段传递给代理服务器的恳求头,值能够包括文本、变量和它们的组合。

语法:proxy_set_header field value;

rewrite

url 重定向。

语法:rewrite regex replacement [flag];

regex:匹配的正则表达表
replacement:替换内容
flag:

  • last : 本条规矩匹配完结后,持续向下匹配新的location URI规矩
  • break: 本条规矩匹配完结即中止,不再匹配后边的任何规矩
  • redirect : 回302暂时重定向,浏览器地址会显现跳转后的URL地址 (防爬虫)
  • permanent : 回来301永久重定向,浏览器地址栏会显现跳转后的URL地址

rewrite支撑运用 if,set,正则,文件和目录判别

正则表达式匹配:

= 等值的比较
~ 与指定正则表达式形式匹配,区别字符巨细写
* 与指定正则表达式形式匹配,不区别字符巨细写
!
与指定正则表达式形式不匹配,区别字符巨细写
!~* 与指定正则表达式形式不匹配,不区别字符巨细写

文件及目录匹配:

-f ,!-f 判别指定途径的文件是否存在
-d, !-d 判别指定途径的目录是否存在
-e, !-e 判别指定途径的文件或目录是否存在
-x, !-x 判别指定途径的文件是否存在且可执行
-r,!-r 判别指定途径的文件是否存在且可读
-w,!-w 判别指定途径的文件是否存在且可写

案例:

判别一个url恳求中是否含有灵敏字符,包括灵敏字符则回绝恳求
location /{
    #获取url完好恳求
    set $URL  $scheme://$http_host$request_uri;
    #根据获取的URL匹配一些约束字符,满意条件回绝访
    #这里以www字符为例,可自行修正
    if ($URL ~ "fuck"){
        echo "恳求带有灵敏字符'fuck',回绝拜访!";
        #重定向到主页
        #rewrite ^/(.*) http://www.home.com/ permanent; 
    }
    echo "正常拜访,url=" $URL;
}
将imgs重写到images
location /imgs {
    rewrite ^/imgs/(.*\.jpg)$ /images/$1 break;
}
 # 拜访 /last.html 的时分,页面内容重写到 /index.html 中,并持续后边的匹配,浏览器地址栏URL地址不变
  rewrite /last.html /index.html last;
  # 拜访 /break.html 的时分,页面内容重写到 /index.html 中,并中止后续的匹配,浏览器地址栏URL地址不变;
  rewrite /break.html /index.html break;
  # 拜访 /redirect.html 的时分,页面直接302定向到 /index.html中,浏览器地址URL跳为index.html
  rewrite /redirect.html /index.html redirect;
  # 拜访 /permanent.html 的时分,页面直接301定向到 /index.html中,浏览器地址URL跳为index.html
  rewrite /permanent.html /index.html permanent;
  # 把 /html/*.html => /post/*.html ,301定向
  rewrite ^/html/(.+?).html$ /post/$1.html permanent;
  # 把其时域名的恳求,跳转到新域名上,域名变化但途径不变 
  rewrite ^/(.*) http://www.jd.com/$1 permanent;

rewrite_log

敞开后,URL重写的相关日志将以notice等级输出到error_log指令装备的日志文件汇总。

语法:rewrite_log on | off;
默许值:rewrite_log off;

ssl_certificate

给 server 指定 PEM 格局的证书。

语法:ssl_certificate file;

示例:ssl_certificate example.com.rsa.crt;

ssl_certificate_key

给 server 指定 PEM 格局的密钥。

语法: ssl_certificate_key file;

示例:ssl_certificate_key example.com.rsa.key;

ssl_session_cache

设置存储会话参数的缓存的类型和巨细。

语法: ssl_session_cache off | none | [builtin[:size]] [shared:name:size];

builtin:内置 OpenSSL 的缓存;仅由一个工作进程运用。缓存巨细在会话中指定。假如未给出巨细,则等于 20480 个会话。运用内置缓存会导致内存碎片。

shared:在所有工作进程之间同享的缓存。缓存巨细以字节为单位指定;一兆字节能够存储大约 4000 个会话。每个同享缓存都应该有一个恣意称号。能够在多个虚拟服务器中运用具有相同称号的缓存。

两个能够一同运用 ssl_session_cache builtin:1000 shared:SSL:10m;

ssl_ciphers

指定启用的密码,密码格局遵从 OpenSSL 标准。

index

指定网站默许页。假如包括多个文件,Nginx会根据文件的枚举次序来查看,直到查找的文件存在;

语法:index file ...;

listen

语法:

	listen address[:port] [default_server] [ssl] [http2 | quic | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
listen port [default_server] [ssl] [http2 | quic | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
listen unix:path [default_server] [ssl] [http2 | quic | spdy] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];