Ningx实用小技巧——rewrite重写用法讲解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38111957/article/details/81263727

一、引言

上一节讲解了location对于不同的URL进行不同的处理,那么这个rewrite也是负责对URL进行解析,然后通过一系列的判断,最后重写到不同的位置。 举一个小小的例子,比如我们查看Nginx访问日志文件,发现到一个ip地址经常访问我们的网站,而且过于频繁。这个时候我们就可以使用rewirte把这个ip给他限制掉,不让他访问,这个时候使用rewrute就很容易实现了。当然我们rewirte不仅仅只是干这个用的,最重要的是在合适的业务中当中,来重写URL。

二、重写中用到的指令

if (条件) {}  设定条件、在进行重写
set 设置变量,方便多条件判断的时候记录状态
return 返回状态码,如:404、403
break 跳出rewrite
rewirte 重写URL

 

三、具体用法小实例

if 语法格式: if 空格 (条件) {重写}, if后面记得加空格哟。

那条件又有几种写法呢? 

1、"=" 用来判断相等,用于字符串比较。

2、"~" 用正则来匹配(此处正则区分大小写),"~*" 不区分大小写的正则

3、-f 来判断是否为文件、-d 是否为目录、-e 是否存在

 

实例一:接下来,我们就使用if、return 来实现限制某个ip的访问。同学们先查询本机的ip地址是多少,或者看访问日志也行。当我们知道自己的ip之后,然后就很容易了。

$remote_addr 这个是可以获取到当前访问主机的IP地址,在我们讲日志管理的时候有提到。如果这个$remote_addr = 要限制的ip地址,则返回状态404。 这样一个小小的配置就可以实现限制ip地址的访问了。

 

实例二:接下来我们使用正则表达式来判断,我们判断当我们使用火狐浏览器的时候,跳转到指定的页面。小编电脑上只有火狐、谷歌浏览器,小伙伴也可以使用其他的浏览器哟。

$http_user_agent 包含着我们请求时所使用的浏览器信息,然后使用正则表达式来进行判断。firefox.html这个页面是小编事先创建好的哟,不要以为自带的。如果信息中包含来Firefox的信息,则重写到firefox.html页面。

 rewrite ^.*$ /firefox.html; "^.*$"代表着访问全部的页面,"/firefox.html"则代表重写页面。

记住这里一定得加上break; 不然会出现500的错误。因为不加上break,在重写到firefox页面的时候,还是会进行判断是否是火狐浏览器,则一直死循环在判断所以会出现500的错误, 加上break就跳出rewirte来。 

 

实例三:如果访问一个不存在的页面,往往是会提示404,那如果想当找不到指定文件时,重写到一个自定义的404页面去。首先我们得拿到请求的页面是什么,我们可以查看到conf/fastcgi.conf配置文件,记录着Nginx全部的变量。

看下图一,记录着Nginx每一个全局变量有什么作用,实现实例三,需要用到$odcument_root$fastcig_script_name

图二:先判断文件是否存在"!-e"不存的意思,则重写的404.html页面。

 

 

实例四:我们再来做一个实例,如果是火狐浏览器只能访问firefox.html,如果访问其他页面则到404页面去。 这里我们使用set 来实现。

先判断是否是火狐浏览器、如果是则 $isfox =1 ,然在后判断访问的是不是firefox.html页面,如果是则$isfox =0;

最后在根据$isfox 来判断是否等于1 ,如果是1则表示,用火狐浏览器请求的但是又不是firefox.html页面,所以重写到404

 

四、总结

本章把rewirte常用的指令到做来一个详细的演示,在学习Nginx的教程,是需要一定的开发基础或者是网络基础。如果完全是干干净净的小白,可能都不清楚这个Nginx该如何去访问。如果遇到这样的同学,小编我先建议先确定你想学什么专业,然后再根据不同的专业进行学习。等时机成熟,需要用的Nginx的时候,再回过头来学习Nginx!!!

猜你喜欢

转载自blog.csdn.net/weixin_38111957/article/details/81263727
今日推荐