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]];