规则:
$remote_addr ~* ^(.*)\.(.*)\.(.*)\.*[0268]$
匹配末尾为0268这样的偶数ip,跳转到指定域名
$remote_addr ~* ^(112)\.(.*)\.(.*)\.(.*)$
开头为 112 的 IP 跳转到指定的域名;
$http_x_forwarded_for ~* ^(112)\.(.*)\.(.*)\.(.*)$
根据 forward 地址段来分流,开头为 112 的跳转到指定域名
例如:
server {
listen 8080; # 监听端口
server_name 10.0.0.1; # 监听地址
access_log /data/logs/nginx_logs/10.0.0.1.log main;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
if ( $remote_addr ~* 10.0.0.2) { ## 请求ip为10.0.0.2的流量转发到下列地址
proxy_pass http://172.16.0.2:10000;
break;
}
if ( $remote_addr ~* ^(.*)\.(.*)\.(.*)\.*[0268]$) { ## 请求ip尾数为0268的ip转发到下列地址
proxy_pass http://172.16.0.3:10000;
break;
}
proxy_pass http://172.16.0.4:8080; ## 默认转发地址
}
}
if 指令条件判断的含义:
正则表达式匹配,其中:
~ 为区分大小写匹配
~* 为不区分大小写匹配
!~ 和 !~* 分别为区分大小写不匹配及不区分大小写不匹配
文件及目录匹配,其中:
-f 和 !-f 用来判断是否存在文件
-d 和 !-d 用来判断是否存在目录
-e 和 !-e 用来判断是否存在文件或目录
-x 和 !-x 用来判断文件是否可执行
rewrite指令的最后一项参数为flag标记,flag标记有:
last 相当于 apache 里面的 [L] 标记,表示 rewrite。
break 本条规则匹配完成后,终止匹配,不再匹配后面的规则。
redirect 返回 302 临时重定向,浏览器地址会显示跳转后的 URL 地址。
permanent 返回 301 永久重定向,浏览器地址会显示跳转后的 URL 地址。