1.语法规则
location [=|~|~*|^~]/uri/{...}复制代码
- = 表示精确匹配,这个优先级最高的
- ^~ 表示uri以某个常规字符串开头,理解为匹配 url路径便可,Nginx不对url作编码,所以请求为/static/80%/aa,能够被规则^~/static/ /aa(注意中间是空格)
- ~ 表示区分大小写的正则匹配、
- ~* 表示不区分大小写的正则匹配
- !~ 表示区分大小写不正则匹配
- !~*表示不区分大小写不正则匹配
- / 表示通用匹配,任何请求都会匹配到,默认匹配
其中经常使用正则
- . : 匹配除换行符之外的任意字符
- ? : 重复0次或1次
- + : 重复1次或更屡次
- * : 重复0次或更屡次
- \d :匹配数字
- ^ : 匹配字符串的开始
- $ : 匹配字符串的介绍
- {n} : 重复n次
- {n,} : 重复n次或更屡次
- [c] : 匹配单个字符c
- [a-z] : 匹配a-z小写字母的任意一个
2.语法优先级别
优先级:= > ^~
首先匹配 = ,其次匹配 ^~,其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,中止匹配,按当前匹配规则请求。3.定义匹配规则
(注:须要安装echo模块才行,才能使用echo)location / {
echo '/';
}复制代码
location = /{
echo '=/';
}复制代码
location = /nginx{
echo '=/nginx';
}复制代码
location ~ \.(gif|jpg|png|js|css) {
echo 'name-gif/jpg/png';
}复制代码
location ~* \.png$ {
echo 'all-png';
}复制代码
location ^~ /static/ {
echo 'static';
}复制代码
4.访问测试
- 访问a.chen.com/,匹配到“=/”
=/复制代码
- 访问a.chen.com/nginx,彻底匹配到…
=/nginx复制代码
- 访问a.chen.com/xxx/xxx.PNG… .png$,由于大写。因此没有匹配到‘~.(gif|jpg|png|js|css)’,由于 ~ 区分大小写 ”
all-png复制代码
- 访问a.chen.com/static/xxx.… ^~ /static/ 由于有 ^~ 中止往下匹配了”
static复制代码
5.经常使用的静态资源匹配规则
5.1.样式和JS
location ~* .*\.(js|css)?${
expires 7d;//7天过时
access_log off;//不保存日志
}复制代码
5.5.图片图标等
location ~* .*\.(jpg|png|gif|jpeg|bmp|ico)?${
expires 7d;//7天过时
access_log off;//不保存日志
}复制代码
5.6.资源数据
location ~* .*\.(zip|rar|exe|msi|iso|gho|mp3|mp4|rmvb|wma|wmv|rm)?${
deny all;//禁止这些文件的下载
}复制代码