Rewrite功能是大多数Web服务器都支持的功能,其在提供重定向服务时起到主要作用。
Nginx后端服务器组的配置的5个指令
服务器组的设置后端服务器的主要指令是在标准HTTP模块ngx_http_upstream_module进行解析和处理的。
- upstream指令
设置后端服务器组的主要指令
upstream name {...}
name是给后端服务器组起的组名,花括号中列出后端服务器组中包含的服务器。
默认情况下,某个后端服务器接收到请求后,按照轮叫调度策略顺序选择组内服务器处理请求。如果一个服务器在处理请求的过程中出现错误,请求就会被顺次交给组内的下一个服务器进行处理。,以此类推,直到返回正常的响应。
- server指令
用于设置组内的服务器
server address [parameters];
address:服务器的地址
parameter:当前服务器配置更多的属性:
- weight=number 为组内服务器设置权重,权重值高的服务器被优先用于处理请求,此时的选择策略为加权轮叫策略。
- max_fails=nember 设置一个请求失败的次数。在一定时间范围内,当对组内某台服务器请求失败的次数超过该变量设置的值时,认为该服务器无效。
- fail_timeout=time 设置max_fails指令尝试请求某台服务器的时间,即上个指令的“一定时间范围内”。另一个作用是在检查服务器是否有效时,若服务器无效,则该变量设置的时间为认为服务器无效的持续时间。在这个时间内不在检查该服务器的状态并一直认为它是无效的。
- backup 将某台服务器标记为备用服务器。
- down 将某台服务器标记为永久的无效状态。
upstream backend
{
server backend.example.com weight=5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
}
- ip_hash指令
用于实现会话保持功能,将某个客户端的多次请求定向到组内同一台服务器上,保证客户端与服务器之间建立稳定的会话。
ip_hash;
ip_hash不能与server指令中的weight变量一起使用。另外,该指令主要根据客户端IP地址分配服务器,Nginx服务器应该处于最前端的服务器,这样才能获取到客户端的IP地址。
upstream backend
{
ip_hash;
server myback1.proxy.com;
server myback2.proxy.com;
}
当我们使用同一客户端向Nginx服务器发送请求时,将会一直由服务器myback1.proxy.com来响应。
- keepalive 指令
用于控制网络连接保持功能。
keepalive connection;
connection为Nginx服务器的每一个工作进程允许该服务器组保持的空闲连接数的上限值。若超过该值,工作进程将使用最近最少使用的策略关闭网络连接。
- least_conn指令
该指令用于配置Nginx服务器使用负载均衡策略为网络连接分配服务器组内的服务器。(使用了最少连接负载均衡算法)
least_conn;
Rewrite功能配置
-
地址重写
实现地址标准化。简单说就是将google.cn这个地址在服务器中改变为www.gggle.com的过程就是地址重定向的过程。 -
地址转发
转发是指网络数据传输过程中数据分组到达路由器或桥接器后该设备通过检查分组地址并将数据转到相邻局域网上的过程。地址转发是指将一个域名指到另一个已有站点的过程。 -
Rewrite规则
Rewrite规则借助PCRE(Perl兼容的正则表达式)实现URI的重写,还支持Nginx预设变量。在Nginx服务器中使用ngx_http_rewrite_moudule模块支持URL的重写功能。 -
if指令
用于支持条件判断。
if (condition) {...}
condition:
空字符串或以“0”开头的字符串认为是false,否则为true。
可以使用正则表达式
请求文件是否使用“-f”或“!-f” “-f”为文件存在返回true;“!-f”为该文件不存在,但该文件所在的目录存在。
“-d”和“!-d” 判断请求的的目录 “-d”为目录存在返回true;“!-d”为该目录不存在,但该目录所在的上级目录存在。
“-e“和“!-e” 判断的是目录或文件
“-e“和“!-e” 文件是否可执行
- break指令
用于中断当前作用域中的其他Nginx配置。当服务器遇到该指令时,回到上一作用域继续向下读取配置。
break;
- return指令
该指令用于完成对请求的处理时,直接向客户端返回响应状态代码,处于该指令后的所有配置都是无效的。
return [texr];
return code URL;
return URL;
text 返回客户端的响应具体内容
code 返回给客户端的HTTP状态码
URL 返回给客户端的URL地址
- rewrite指令
该指令通过正则表达式的使用来改变URL。
介绍两个概念:
URI:通用资源标识符
URL:统一资源定位符,为URI的子集。
rewrite regex replacement [flag];
regex:
用于匹配URI的正則表達式,使用()标记要截取的内容
接收到的URI不能包含HOST地址
URL的请求指令不能包含在rewrite接收到的URI内容中。
replacement:
匹配成功后用于替换URI中被截取内容的字符串。
flag:用来设置rewrite对URI的处理行为。
- last 终止继续在本location块中处理接收到的URI,并将此处重写的URI作为一个新的URI,跳出本块,使用在各个location块(包括跳出的块)进行处理。
- break将此处重写的URI作为一个新的URI,在本块中继续进行处理。
- redirect 将重写后的URI返回给客户端,状态码返回302,指明是临时的
- permanent 将重写后的URI返回给客户端,状态码为301,指明为永久重定向URI。
- rewrite_log 指令
配置是否开启URL重写日志的输出功能
rewrite_log on|off;
若打开,其重写的相关日志文件将以notice级别输出到error_log指令配置的日志文件中。
- set指令
设置一个新变量
set variable value;
variable为变量名称,以$为第一个字符
value:变量的值
- uninitialized_variable_warn 指令
用于配置使用未初始化的变量时,是否记录警告日志。
uninitialized_variable_warn on | off;
- Rewrite常用全局变量
Rewrite功能配置过程中可能使用的Nginx全局变量。
建议大家查文档把常用的记住。