nginx rewrite 跨域
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
1.rewrite指令
rewrite 指令语法:
作用域:server 、location、if
功能:如果一个URI匹配指定的正则表达式regex,URI就按照 replacement 重写。
rewrite 按配置文件中出现的顺序执行。
可以使用 flag 标志来终止指令的进一步处理。
如果 replacement 以 http:// 、 https:// 或 $ scheme 开始,将不再继续处理,这个重定向将返回给客户端。
rewrite后的请求参数
如果replacement包含新的请求参数,则在它之后附加先前的请求参数;
如果不想要之前的请求参数,则在replacement的末尾加一个问号,来避免附加先前的参数。
flag 有四种参数可以选择:
last 停止处理后续 rewrite 指令集,然后对当前重写的新 URI 在 rewrite 指令集上重新查找。
break 停止处理后续 rewrite 指令集,并不再重新查找,但是当前location 内剩余非 rewrite 语句和 location 外的 非rewrite 语句可以执行。
redirect 如果 replacement 不是以 http:// 或 https:// 开始,返回 302 临时重定向
permanent 返回 301 永久重定向
2.正则常用符号
. 匹配换行符以外的任何字符
? 重复0次或1次
+ 重复1次或更多次
* 重复0次或更多次
\d 匹配数字
^ 匹配字符串的开始
$ 匹配字符串的结束
{n} 重复n次
{n,} 重复n次或者更多次
[c] 匹配单个字母c
[a-z] 匹配小写字母的任意一个
[a-z0-9] 匹配字母或数字的任意一个
小()之间的内容,可以在后面用$1来引用,$2表示是前面第二个()里的内容。
注意\转义特殊字符
3.实例
一些规则:
rewrite实例
1. /images/ef/ub272/test.png重写到/data?file=test.png
2./images/bla_500×400.jpg重写到/resizer/bla.jpg?with=500&height=400
3.http://192.168.13.129/newjr/web/loanRecord/selectFinanceData?type=0重写到http://192.168.13.95:8850/web/loanRecord/selectFinanceData?type=0
4.proxy_pass区别
proxy_pass把请求代理到其他主机,其中 http://www.b.com/ 写法和 http://www.b.com写法的区别如下:
不带/
带/
上面两种配置,区别只在于proxy_pass转发的路径后是否带 “/”。
针对情况1,如果访问url = http://server/html/test.jsp,则被nginx代理后,请求路径会便问http://proxy_pass/html/test.jsp
,将html/ 作为根路径,请求test/路径下的资源。
针对情况2,如果访问url = http://server/html/test.jsp,则被nginx代理后,请求路径会变为 http://proxy_pass/test.jsp
,直接访问server的根资源。
5.匹配符号
- =开头表示精确匹配
- ^~ 开头表示uri以某个常规字符串开头,不是正则匹配
- ~ 开头表示区分大小写的正则匹配;
- ~* 开头表示不区分大小写的正则匹配
- / 通用匹配, 如果没有其它匹配,任何请求都会匹配到
6.匹配顺序
备注:此点参考:https://developer.aliyun.com/article/47358
优先级
(location =) > (location 完整路径) > (location ^~ 路径) > (location ,* 正则顺序) > (location 部分起始路径) > (/)
上面的匹配结果
按照上面的location写法,以下的匹配示例成立:
/ -> config A
精确完全匹配,即使/index.html也匹配不了
/downloads/download.html -> config B
匹配B以后,往下没有任何匹配,采用B
/images/1.gif -> configuration D
匹配到F,往下匹配到D,停止往下
/images/abc/def -> config D
最长匹配到G,往下匹配D,停止往下
你可以看到 任何以/images/开头的都会匹配到D并停止,FG写在这里是没有任何意义的,H是永远轮不到的,这里只是为了说明匹配顺序
/documents/document.html -> config C
匹配到C,往下没有任何匹配,采用C
/documents/1.jpg -> configuration E
匹配到C,往下正则匹配到E
/documents/Abc.jpg -> config CC
最长匹配到C,往下正则顺序匹配到CC,不会往下到E