1.Nginx后端服务器组配置指令
这些指令用于设置反向代理、负载均衡、web缓存服务。
指令 | 格式 | 说明 |
---|---|---|
upstream | upstream name {...} | 用来设置nginx的后端服务器,可以配置在http、server块,name是后端服务器组的名字,默认会按照轮询调度处理请求。 |
server | server address [parameters] | 设置组内的服务器,address是服务器的地址,可以是带有端口号的IP地址、域名、或者unix:为前缀的进程间通信的Unix Domain Socket .parameters 为当前服务器配置更多属性,weight=number,为组内服务器设置权重,max_fails=number,设置一个请求失败次数,在一定时间范围内,当对组内某台服务器请求的次数超过该变量设置的值时,认为该服务器无效。404不是请求失败。更多见案例解析。 |
ip_hash | ip_hash | 该指令用于实现回话保持功能,将某个客户端的多次请求定向到组内同一个服务器上,保证客户端与服务器之间建立稳定的回话,只有该服务器无效时,才会被下一个服务器接收和处理。 |
keepalive | keepalive connections | 控制网络连接保持功能,保证nginx服务器工作进程为服务器组打开一部分网络连接,并将数量控制在一定范围内。connections为nginx服务器每一个工作进程允许服务器组保持空闲网络连接数的上限,超过该值工作进程将采用最近最少使用的策略关闭网络连接。 |
least_conn | least_conn | 最少负载连接均衡算法,在选择组内服务器时,考虑各服务器权重时,每次选择的都是网络连接最小的服务器。 |
2.### Rewrite 功能配置
URL重写功能非常有用,可以在网站改变结构后,不需要客户端修改之前的代码。
if指令
在server或者location模块配置,根据条件判断结果选择不同的nginx配置。
if ( condition ) {
...
}
- condition如果为变量名时以空字符串或者0开头的任意字符串结果为false,其他条件为true
- condition 使用
=
或者!=
判断字符串是否相等时,以结果为依据,字符串不用双引号引用。 - 使用正则匹配。表示匹配,表示匹配忽略大小写,!表示不匹配,!表示不匹配并且忽略大小写。
正则表达式只有在需要}或者;号时才需要给整个字符串加单引号
- -d 和 !-d 表示请求的目录是否存在。
- -e或者 !-e表示请求的目录或者文件
- -x或者 !-x表示请求的文件是否可执行
- -f 或者!-f表示请求的文件是否存在。if (-f $request_filename){}
break指令
该指令用于中断当前作用域的其他的nginx配置,于该指令处于同一作用域的nginx配置文件中,位于它前面的指令配置生效,位于后面的指令不生效。遇到该指令,返回上一层作用域继续读配置,可以在server、localtion、if里面使用。
location / {
if($slow){
set $id $1;
break;
limit_rate 10k; #无效
}
... #break后来到这里。
}
return指令
完成请求处理,直接向客户端返回状态代码,后面的nginx指令无效,if、server、location模块都支持。
return [text] 或者 return code URL;或者return URL;
code :http状态码
text:返回给客户端的响应体内容,支持变量。
URL:返回给客户端的URL地址。
rewrite指令
格式 : rewrite regex replacement [flag]
:
案例 : rewrite ^/project(.*)$ https://www.cyzone.cn$1 permanent
将 http://host/project/**域名重写到后面的地址。匹配的uri不包含主机地址和请求参数。
flag取值
- last:终止在本location模块处理接收到的URI,在此处重写的URI作为一个新的URI,使用个location模块处理。
- break:此处重写的URI作为新的URI,在本模块里面继续进行处理。该模块重写后的地址在本location模块继续执行,不会再作为新的URI转入其他的location模块
- redirect:将重写后的URI返回客户端,状态码为302,用于replacement不是以http或者https开头的情况。
- permanent :301,指明永久重定向。
rewrite_log
rewrite_log on | off ,控制重写的日志是否记录,开启的话记录在error_log文件
set
set variable value 给一个变量设置值,已$开头,不能和默认的重名
网友评论