
在Nginx已经成为很多公司作为前端反向代理服务器的首选,在实际工作中往往会遇到很多跳转(重写URL)的需求。比如更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。
1,URL看起来更加规范,合理
2,企业会将动态URL地址伪装成静态地址提供服务
3,网址换新域名后,让旧的访问跳转到新的域名上
4,服务端某些业务调整
二、常见的Nginx正则表达式| ^ | 匹配输入字符串的起始位置 |
| $ | Lt输入字符串的结束位置 |
| 匹配前面的宁符零次或多次。如ol""能匹配"o及"or". "oll | |
| + | 匹配前面的字符一次或多次。如r"ol+"能匹配"oI及"oll、"oll,但不能匹配"o” |
| ? | 匹配前面的字符零次或一次,例如do(es)?"能匹配“do”或“does”,”?”等效于”{0,1}” |
| . | 匹配除""n'之外的f何单个字符,若要匹配包括"n"在内的任意字符,请使用诸如 "[.n]"之类的模式 |
| 将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用 | |
| d | 匹配纯数字 |
| {n} | 重复n次 |
| {n,} | 重复n次或页多次 |
| {n,m} | 重复n到m次 |
| [ ] | 定义匹配的字符范围 |
| 0 | 匹配单个字符c |
| [a-z] | 匹配, a-z小写字母的任意一个 |
| [a-zA-Z0-9] | 匹配所有大小写字母或数字 |
| () | 表达式的开始和结束位置 |
| | | 或运算符 |
语法格式
rewrite[flag]; last 相当于apache的L标记,表示完成rewrite break 本地规则匹配,完成即终止,不在匹配后面的任何规则 redirect 返回302临时重定向,浏览器地址会显示跳转后的URL地址,爬虫不会更新3URL permanent 返回301永久重定向,浏览器地址栏会显示跳转后的
三、location 1、location分类
| 精准匹配 | location =/{} |
| 一般匹配 | location / {} |
| 正则匹配 | location~/{} |
| l= | 进行普通字符精确匹配,也就是完全匹配 |
| ^~ | 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它location |
| ~ | 区分大小写的匹配 |
| ~* | 不区分大小写的匹配 |
| !~ | 区分大小写的匹配取非 |
| !~* | 不区分大小写的匹配取非 |
相同类型的表达式,字符串长的会优先匹配 按优先级排列 首先精确匹配 = 其次前缀匹配 ^~ 其次按文件中顺序的正则匹配 ~或~* 然后匹配不带任何修饰符的前缀匹配 最后是交给 / 通用匹配四、location 示例说明
① location = / {}
=为精准匹配 / ,主机名后面不能带任何字符串,比如访问 / 和 /data ,则 / 匹配 ,/data 不匹配。再比如 location = /abc ,则只匹配/abc,/abc/或/abcd 不匹配。若location /abc ,则匹配 /abc 、/abcd/ 、/abc/。
② location / {}
因为所有的地址都是以 / 开头,所以这条规则将匹配到所有普请求,比如访问 / 和 /data ,则 / 匹配,/data 也匹配。 但若后面还有正则表达式和最长字符,则优先匹配(最长匹配)
③location /documents/ {}
匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索其它 location,只有其它 location 后面的正则表达式 没有匹配到时,才会采用这一条。
④location /documents/abc {}
匹配任何以 /documents/abc 开头的地址,匹配符合以后,还要继续往下搜索其它 location ,只有其它 location 后面的正则表达式没有匹配到时,才会采用这一条。
⑤ location ^~ /images/ {}
匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,直接采用这一条。
⑥ location ~ .(gif|jpg|jpeng)$ {}*
匹配所有以gif、jpg或jpeng结尾的请求,然而,所有请求 /images/ 下的图片会被 location ^~ /images/ 处理,因为^~ 的优先级更高,所以到达不了这一条正则。
⑦ location /images/abc {}
最长字符匹配到 /images/abc ,优先级最低,继续往下搜索其它 location,会发现 ^~ 和~ 存在
⑧ location ~ /images/abc {}
匹配以/images/abc 开头的,优先级次之,只有去掉location ^~ /images/ 才会采用这一条
⑨ location /images/abc/1.html {}
匹配 /images/abc/1.html 文件,如果和正则 location ~ /images/abc/1.html 相比,正则优先级更高