正在加载中...

关闭
请选择需要拨打的号码
关闭
请根据问题类型选择QQ咨询

nginx服务器怎样利用正则表达式设置重定向伪静态和防盗链?

nginx服务器怎样利用正则表达式设置重定向伪静态和防盗链?

nginx是一款神器的web服务软件,它的配置文件提供了强大的编程空间,你可以借助于Nginx正则表达式之匹配操作符对服务器的重定向、伪静态、防盗链等进行详细的配置。怎么配置Nginx的重定向呢?万维景盛工程师为您分享方法:

nginx可以在配置文件中对某些内置变量进行判断,从而实现某些功能。

比如:防止重写rewrite、盗链、对静态资源设置缓存以及浏览器限制等等。

值得注意的是,nginx配置中有if指令,但是没有对应else指令,所以判断要分为匹配和不匹配两种情况进行分别处理。

字符串表达式支持正则表达式,能设定大小写是否敏感。因此共有四个操作符,

如下:

~     区分大小写(大小写敏感)匹配成功 
~*   不区分大小写匹配成功 
!~    区分大小写匹配失败 
!~*  不区分大小写匹配失败


1: 通过if指令限制某些类型的客户端的访问
所有的Nginx内置变量都可以通过if指令和正则表达式来进行匹配,并且根据匹配结果进行一些操
 

 代码如下

location / {
if ($http_user_agent ~ MSIE) {
return 503;
}
}

#限制IE访问

如果把MSIE改成 Mozilla 就基本上把IE和firefox这样pc浏览器限制了
2和3主要是针对盗链做处理
2:针对不同的文件类型

可能这个指令是我们平时使用正则匹配用的最多的指令:

 代码如下

location ~ .*.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv)$ {
     if ($http_referer ~* alihosted.com {
     #rewrite ^/ http://www.alihosted.com/403.html;
     return 403;
      }
}

3:针对不同的目录

 代码如下

location /img/ {
    root /data/img/;
   if ($http_referer ~* alihosted.com) {
             rewrite  ^/  http://www.alihosted.net/images/error.gif
             #return   403;
    }
}

  1. ^~操作符。 

    ^~标识符后面跟一个字符串。Nginx将在这个字符串匹配后停止进行正则表达式的匹配(location指令中正则表达式的匹配的结果优先使用),如:location ^~ /images/,你希望对/images/这个目录进行一些特别的操作,如增加expires头,防盗链等,但是你又想把除了这个目录的图片外的所有图片只进行增加expires头的操作,这个操作可能会用到另外一个location,例如:location ~* .(gif|jpg|jpeg)$,这样,如果有请求/images/1.jpg,nginx如何决定去进行哪个location中的操作呢?结果取决于标识符^~,如果你这样写:location /images/,这样nginx会将1.jpg匹配到location ~* .(gif|jpg|jpeg)$这个location中,这并不是你需要的结果,而增加了^~这个标识符后,它在匹配了/images/这个字符串后就停止搜索其它带正则的location。

2.=操作符。

等于符号=表示精确的查找地址,如location = /它只会匹配uri为/的请求,如果请求为/index.html,将查找另外的location,而不会匹配这个,当然可以写两个location,location = /和location /,这样/index.html将匹配到后者,如果你的站点对/的请求量较大,可以使用这个方法来加快请求的响应速度。


3.@操作符。

@表示为一个location进行命名,即自定义一个location,这个location不能被外界所访问,只能用于Nginx产生的子请求,主要为error_page和try_files。
注意,这3个标识符后面不能跟正则表达式,虽然配置文件检查会通过,而且没有任何警告,但是他们并不会进行匹配。
综上所述,location指令对于后面值的匹配顺序为:

1.标识符“=”的location会最先进行匹配,如果请求uri匹配这个location,将对请求使用这个location的配置。
2.进行字符串匹配,如果匹配到的location有^~这个标识符,匹配停止返回这个location的配置。
3.按照配置文件中定义的顺序进行正则表达式匹配。最早匹配的location将返回里面的配置。
4.如果正则表达式能够匹配到请求的uri,将使用这个正则对应的location,如果没有,则使用第二条匹配的结果。

这里再举个应用的例子,也就是旧站迁移后进行便利的重定向。

      #将原来的php文件都转向到新域名。位置必须在伪静态之前,否则无法检测到php文件
    location ~ .*\.(php)?$
    {
		return 301 https://www.verysign.cn$request_uri;
    }

这样,就可以将站点中的所有php文件都重定向到一个新的域名了。


返回上一页