Nginx的深入使用
1.server就是一个主机
2.location / 指的是一般匹配,location= { }这个指的是精准匹配,location ~正则匹配
3.upstream lizhen就相当于一个个模块,我们下面在代理的时候可以直接用proxy_pass http:// lizhen
在某个模块中,我们配置地址的时候,如果后面加上了down说明这台机器不参与,backup如果某台机器down之后,这台机器会立刻参与,替代他的位置。
4.worker_processes 1; 指的是进程数。
5.nginx在功能上来讲是分为三块
http协议-》到达nginx-》选择一个handler(处理器模块)-》过滤器模块(多个过滤器,可以处理动静分离,防盗链,一般的处理内容都会在此)-》http响应模块
6.在配置的时候我们有三种配置方式
基于域名:listen:80; server_name:lizhen.com;
基于ip: listen:80; server_name:192.168.1.140
基于端口号: listen: 9001; server_name:lizhen.com
7.日志相关
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
上面的main的格式对应日志中的位置就是这样的。
10.0.1.139 - - [07/Jun/2018:13:51:42 +0800] "GET /eureka/js/wro.js HTTP/1.1" 304 0 "http://10.1.1.146/" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"
main格式是我们定义好的一种日志格式。
tail logs/error.log 错误日志
tai ogs/access.log 访问相关的日志
'$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
"GET /eureka/js/wro.js HTTP/1.1"
304 0 "http://10.1.1.146/"
"Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"
9.if和set的使用
10.nginx限流
-----------------------------------------------------------------
nginx限制ip并发数,也是说限制同一个ip同时连接服务器的数量
1.limit_zone 功能是限制一个客户端的并发连接数,且只能放在http作用域
limit_conn_zone $binary_remote_addr zone=one:10m;
#定义一个名为one的limit_zone,大小10M内存来存储session
2,添加limit_conn
limit_conn one 20; #表示最大并发连接数
limit_rate 500k; #带宽限制,对单个连接限数,如果一个ip 20个连接,就是500Kx20
-----------------------------------------------------------------
限制同一个ip在一段时间里连接服务器的次数.
limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s;
#定义一个名为allips的limit_req_zone用来存储session,大小是10M内存,限制平均每秒的请求为5个。
limit_req zone=allips burst=5 nodelay;
最大延迟请求数量,以及是否在同一秒处理,还是按照一定的速率处理
#限制每ip每秒不超过20个请求,漏桶数burst为5,表示最大延迟请求数量不大于5。
#brust的意思就是,如果第1秒、2,3,4秒请求为19个,
#第5秒的请求为25个是被允许的。
#但是如果你第1秒就25个请求,第2秒超过20的请求返回503错误。
#nodelay,如果不设置该选项,严格使用平均速率限制请求数,
#第1秒25个请求时,5个请求放到第2秒执行,
#设置nodelay,25个请求将在第1秒执行。
11.location正则表达式的匹配
---------------------------------下面简单说明下nginx location匹配规则-------------------------------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
location匹配命令 ~ 表示执行一个正则匹配,区分大小写 ~* 表示执行一个正则匹配,不区分大小写 ^~ 表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录 = 进行普通字符精确匹配 @ 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files =前缀的指令严格匹配这个查询。如果找到,停止搜索。 所有剩下的常规字符串,最长的匹配。如果这个匹配使用^〜前缀,搜索停止。 正则表达式,在配置文件中定义的顺序。 如果第3条规则产生匹配的话,结果被使用。否则,如同从第2条规则被使用。 location 匹配的优先级(与location在配置文件中的顺序无关) = 精确匹配会第一个被处理。如果发现精确匹配,nginx停止搜索其他匹配。 普通字符匹配,正则表达式规则和长的块规则将被优先和查询匹配,也就是说如果该项匹配还需去看有没有正则表达式匹配和更长的匹配。 ^~ 则只匹配该规则,nginx停止搜索其他匹配,否则nginx会继续处理其他location指令。 最后匹配理带有 "~" 和 "~*" 的指令,如果找到相应的匹配,则nginx停止搜索其他匹配;当没有正则表达式或者没有正则表达式被匹配的情况下,那么匹配程度最高的逐字匹配指令会被使用。
location = / { # 只匹配"/".
[ configuration A ] } location / { # 匹配任何请求,因为所有请求都是以"/"开始,但是更长字符匹配或者正则表达式匹配会优先匹配
[ configuration B ] } location ^~ /images/ { # 匹配任何以 /images/ 开始的请求,并停止匹配 其它location
[ configuration C ] } location ~* \.(gif|jpg|jpeg)$ { # 匹配以 gif, jpg, or jpeg结尾的请求. 但是所有 /images/ 目录的请求将由 [Configuration C]处理.
[ configuration D ] } |