nginx能够在配置文件中对某些内置变量进行判断,从而实现某些功能。例如:防止rewrite、盗链、对静态资源设置缓存以及浏览器限制等等。因为nginx配置中有if指令,可是没有对应else指令,因此判断要分为匹配和不匹配。html
字符串表达式支持正则表达式,能设定大小写是否敏感。所以共有四个操做符,java
以下:nginx
~ 区分大小写(大小写敏感)匹配成功
~* 不区分大小写匹配成功
!~ 区分大小写匹配失败
!~* 不区分大小写匹配失败正则表达式
1: 限制某些类型的客户端的访问
if指令
全部的Nginx内置变量均可以经过if指令和正则表达式来进行匹配,而且根据匹配结果进行一些操
浏览器
代码以下 | 复制代码 |
location / { |
#限制IE访问spa
若是把MSIE改为 Mozilla 就基本上把IE和firefox这样pc浏览器限制了
2和3主要是针对盗链作处理
2:针对不一样的文件类型.net
可能这个指令是咱们平时使用正则匹配用的最多的指令:firefox
代码以下 | 复制代码 |
|
3:针对不一样的目录
代码以下 | 复制代码 |
location /img/ { |
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,若是没有,则使用第二条匹配的结果。