1 Nginx rewrite基础
功能: 实现URL或URI的重写
PCRE
1 | ☑ Nginx 的 Rewrite 规则采用 PCRE(Perl Compatible Regular Expressions)Perl兼容正则表达式的语法进行规则匹配. |
URL
Uniform Resource Location: 统一资源定位符
URI
Uniform Resouce Location: 通用资源标志符
指令
语法规则
变量和运算符
变量 | 说明 |
---|---|
$host | 请求的host |
$[1-9] | 位置化参数 |
运算符 | 含义 | 对应的否运算 |
---|---|---|
= | 判等 | != |
~ | 区分大小写字符的匹配 | !~ |
-f | 判断文件是否存在 | !-f |
-d | 判断目录是否存在 | !-d |
-e | 判断文件或者目录是否存在 | !-e |
-x | 判断文件是否可执行 | !-x |
if指令
1 | if($http_user_agent ~MSIE){ # 如果用户浏览器的user_agent指明自己使用的是IE(~:不区分大小写) |
return指令
☑ 用途:返回状态码(如果为状态码设置了替换页面,则会进入替换的页面)
案例:如果访问的URL以”.sh”或”*.bash”结尾,则返回状态码403
1 | location ~ .*\.(sh|bash)?${ |
set、write指令
set
☑ 用途: 为变量赋值
rewrite
☑ 用途: DNS重定向
rewrite指令的最后一项参数(flag标记) | 说明 | 功能 |
---|---|---|
last | 相当于Apache里的[L]标记,表示完成rewrite | 用来实现URI重写,浏览器地址栏URI地址不变 |
break | 本条规则匹配完成后,终止匹配,不再匹配后面的规则 | 用来实现URI重写,浏览器地址栏URI地址不变 |
redirect | 返回302临时重定向,浏览器地址栏会显示跳转后的URL地址 | 用来实现URL跳转,浏览器地址栏显示跳转后的URL地址 |
permanent | 返回301永久重定向,浏览器地址栏会显示跳转后的URL地址 | 用来实现URL跳转,浏览器地址栏显示跳转后的URL地址 |
案例1(指令):对来自内网和外网的请求进行不同处理
1 | locationc *{ |
案例2(Nginx配置文件):应用负载均衡
1 | location /cms/{ |
建议:一般在根
location 中(即location /{…})或直接在server标签中编写rewrite规则,推荐使用last
标记,在非根
location中(location /cms/{...}
),则使用 break
标记
案例3:将原来要访问的/data
目录重写为/bbs
1 | rewrite ^/data/?$ /bbs/ permanent; |
案例4:根据不同的浏览器得到不同的结果
1 | if($http_user_agent ~MSIE){ |
案例5:防止盗链
1 | location ~* \.(gif|jpg|png|swf|flv)${ |
案例6(域名跳转):所有对www.abc.com的访问,redirect到www.test.com
1 | server{ |
案例3-5:整合
1 | server{ |