nginx location块配置规则、匹配执行顺序、防盗链、缓存过期时间、alias别名设置以及文件禁止下载等总结 – 21运维
通知: .-...

nginx location块配置规则、匹配执行顺序、防盗链、缓存过期时间、alias别名设置以及文件禁止下载等总结

nginx 21运维 2561浏览 0评论

之前nginx安装配置站点的时候发现location出现很多,比如站点目录,匹配脚本,防盗链以及设置过期时间等等,具体概念不清楚。本文章主要讲解一些nginx location的用法,多数内容是从网络获取,这里根据自己的使用和理解做一个总结,方便理解学习以及资料查询,同时也方便朋友了解学习。

1,nginx location语法:location [=|~|~*|^~] /uri/ { … }


= 表示精确匹配,这个优先级也是最高的
~  表示区分大小写的正则匹配
~* 表示不区分大小写的正则匹配(和上面的唯一区别就是大小写)
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配的正则
^~ 表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式。
/ 通用匹配,任何请求都会匹配到,默认匹配.

文件以及目录匹配 :
1,-f 和!-f 用来判断文件是否存在,常用
2,-d 和!-d 用来判断目录是否存在,常用
3,-e 和!-e用来判断文件或目录是否存在,常用
4,-x 和!-x用来判断文件是否可执行,了解即可

2,下面讲讲这些语法的一些规则和优先级
多个location配置的情况下匹配顺序为(仅供参考):
优先级=>^~>

首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

例子,有如下匹配规则:

location / {
   echo "/"; 
}
location = / {
   echo "=/";
}
location = /nginx {
   echo "=/nginx";
}
location ~ \.(gif|jpg|png|js|css)$ {
   echo "small-gif/jpg/png";
}
location ~* \.png$ {
   echo "all-png";
}
location ^~ /static/ {
   echo "static";
}

一下是访问情况:

以下是各种的访问情况
访问http://test.21yunwei.com/.因为/是完全匹配的
如下:

# curl http://test.21yunwei.com/
=/

访问http://test.21yunwei.com/nginx,因为完全匹配了”=/nginx”

# curl http://test.21yunwei.com/nginx
=/nginx

访问http://test.21yunwei.com/xxx/1111.PNG,从第一个开始尝试匹配,最后匹配到了~* \.png$ .

# curl http://test.21yunwei.com/xxx/1111.PNG (注意,这是大写)
all-png

访问http://test.21yunwei.com/static/1111.png,虽然static放在最后面,但是因为有^的缘故,他是最匹配的.

# curl http://test.21yunwei.com/static/1111.png
static

好了,最后给出我们先上环境的静态文件的匹配规则

location ~* .*\.(js|css)?$
{
        expires 7d;   //7天过期,后续讲解
        access_log off; //不保存日志
}
 
location ~* .*\.(png|jpg|gif|jpeg|bmp|ico)?$
{        
        expires 7d;
        access_log off;
}
 
location ~* .*\.(zip|rar|exe|msi|iso|gho|mp3|rmvb|mp4|wma|wmv|rm)?$
{
        deny all; //禁止这些文件下载,大家可以根据自己的环境来配置
}

一些常用的location用法这里做下简单举例:

location = / {
 # 只匹配 / 查询。
 
}

location / {
 # 匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配。
 
}
location ^~ /images/ {
 # 匹配任何已 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
 
}
location ~* .(gif|jpg|jpeg)$ {
 # 匹配任何已 gif、jpg 或 jpeg 结尾的请求。
 
}
location ~* .(gif|jpg|swf)$ {
  valid_referers  www.21yunwei.com  21yunwei.com;
  if ($invalid_referer) {
  #防盗链
  rewrite ^/ http://www.21yunwei.com/deny.html;
  }
}

location ~* .(js|css|jpg|jpeg|gif|png|swf)$ {
if (-f $request_filename) {
   #根据文件类型设置过期时间
   expires    1h;
   break;
}
}

location ~* .(txt|doc)${ 
 #禁止访问某个目录
    root /home/wwwroot/21yunwei/test;
    deny all;
}
location  ^~ /image  {
	alias   /wwwroot/proxy/pic ; #配置alias别名,url带有image的时候,会访问服务器实际目录中的pic目录
}

转载请注明:21运维 » nginx location块配置规则、匹配执行顺序、防盗链、缓存过期时间、alias别名设置以及文件禁止下载等总结

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址