博客列表 >nginx 配置文件的 Rewrite功能介绍和防盗链实现。

nginx 配置文件的 Rewrite功能介绍和防盗链实现。

有什么是忘不了的的博客
有什么是忘不了的的博客原创
2020年06月18日 14:21:03774浏览

**Rewrite功能的配置**

*Rewrite概念*

地址重写和地址转发。当网站改变网址了,可以让用户原先保存的书签照样可以访问。也无需更换其他网站到我们网站的友情链接。

*地址重写*

概念:当我们访问 www.google.com 和 google.cn 都可以访问到谷歌,只不过在访问google.cn的时候把他转为 www.google.com 。

*地址转发*

概念:将一个域名指向一个已存在的站点的过程。

*地址重写和地址转发的区别*

1、转发不会改变浏览器地址栏的地址,而重写会。

2、转发只会发送一次网络请求,重写会发送两次。

3、转发一般用在站内,重写没有限制。

4、转发可以不写全地址,重写必须写全。

....

*rewrite*   注意在进行正则匹配的时候用到 {} 必须要加上引号给uri 否则会保错。

rewrite regex replacement

`rewrite` :是指令,可以用再server块和location块使用。

`regex`:匹配的uri, uri和url是不同的,如https://www.123du.cc/dudu-37/648524/ uri是/dudu-37/648524/部分。 可以匹配一部分数据然后,在replacement里使用。

`replacement`:匹配成功后跳转的地址,如:https://www.baidu.com/

*例子*

rewrite ^/   https://www.baidu.com/ #匹配成功跳入百度

rewrite ^(/.* )(\.php)    https://www.baidu.com$1$2  #匹配成功后,吧获取的参数 $1 $2 追加给百度链接后面,

如:访问 https://www.123du.cc/dudu-37/648524/ 跳转到 https://www.baidu.com/dudu-37/648524/


*利用Rewrite功能做防盗链*

location  ~*  ^.+\.(gif|jpg|png|swf|flv|rar|zip)$ {

valid_referers none blocked www.baidu.com ;

if ($invalid_referer) {

rewrite ^/     https://www.baidu.com/images/abc.png;

}

}

*解析*

`location`:匹配uri的指令。

`valid_referers` : 获取Referer头域的值,并根据这个值来改变 全局变量 $invalid_refere 的值。

`none`: Referer头域的值为空,的时候。

`blocked`:Referer头域的值被代理服务器或防火墙删除或伪装的情况下。

`server_name`:允许访问的域名或ip可以设置多个,可以使用通配符`*`,我这里是‘www.baidu.com’。

当valid_referers 匹配成功的时候回吧全局的 $invalid_referer设置为0,匹配不成功设置为1。

`rewrite `:条件成立,直接给他返回个图片地址。你也可以设置成HTTP状态码。直接return 404;

这里有个需要注意的问题:

    重启nginx报错:nginx: [emerg] unknown directive "if($invalid_referer)" in /etc/nginx/nginx.conf:47

    这是因为需要给 if ($invalid_referer) { }加空格,要不nginx就认为这个整体这是一个指令。所以报指令不存在的错误。

    而且,nginx需要语句需要必须以 ; 结尾。












声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议