服务器组
nginx支持设置一组服务器作为后端服务器,反向代理、负载均衡经常会涉及。
- upstream : 设置服务器组的指令,类似于server
的块upstream name { .... }
- server: 设置组内服务器,
server address [parameters]
address
ip:port 域名等weight=numbers
权重,默认为1,加权轮询策略max_fails=numbers
设置一个请求失败的次数,一定时间内超过次数认为服务无效fail_timeout=time
在此时间内,认为服务器无效,默认10sbackup
将某台服务器标注为备用服务器,只有当正常服务器失败或繁忙时,才会请求down
将某台服务器标记为永久无效状态ip_hash
用于实现会话保持功能,请某刻客户端的请求定向到组内的一台服务器上,改服务器down掉以后,交由下个服务器处理ip_hash;
keepalive
:控制网络连接保持功能keepalive timeout;
least_conn
:最好连接负载均衡算法least_conn;
upstream all_server {
ip_hash;
server 10.8.177.23:2880;
server 10.8.177.24:2880;
server 10.8.177.25:2880 backup;
}
Rewrite功能
重写,即重定向。此功能也对反向代理提供了支持。常用的场景:
域名跳转
域名镜像
独立域名
目录自动加/
目录合并
防盗链
,
常用指令:
if
可在server location
块中配置if (condition) {...}
- 如果condition为变量名时,若为空或者以’0’开头的任意字符串都为false
- 如果condition为
= !=
时,比较字符串是否相等 - 如果condition可为正则表达式,
~
大小写敏感~*
大小写不敏感,可对正则提取,使用$1~9取值 -f
是否文件,-d
是否目录,-e
文件/目录是否存在,-x
请求文件是否可执行break
中断当前相同作用域中的配置位于此指令之前的生效之后的不生效。return
可在server location if
块中使用return [text]
返回给客户端的响应体的内容,支持变量的使用return URL
返回给客户端的URLreturn code URL
返回给客户端的0-999的编码以及URL。444
编码可以强制关闭服务器与客户端的连接rewrite
通过使用正则表达式来改变URI,可以同时存在多个rewrite regex replacement [flag];
- regex 用于匹配URI的正则表达式
- replacement 匹配成功后用于替换URI中被截取内容的字符串。如果该串是由
http://
或者https://
开头的,则将其直接返回。rewrite alleyz.com http://example.com$request_uri?permanent
- flag 用来设置rewrite对uri的处理行为。
last
将重写的uri重新在server块中执行。break
此处处理的URI不会再转向其他location块了。redirect
重新以302状态码将uri返回给客户端,http https
开头的replacement不适用。permanent
,以301状态吗返回URI给客户端。 rewrite_log on |off
是否开启rewrite日志,若开启以notice输出到error_log中
- 如果condition为变量名时,若为空或者以’0’开头的任意字符串都为false
常用全局变量
变量 | 说明 |
---|---|
$args | 请求参数,同$query_string |
$document_uri | 请求的路径,同$uri |
$request_uri | 请求的路径以及请求的参数 |
例子
- 域名跳转
server {
listen 3022;
server_name 10.8.177.21;
gzip on;
gzip_vary on;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
rewrite ^/ http://www.baidu.com;
}