之前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目录
}
转载请注明:西数超哥博客www.ysidc.top» nginx location块配置规则、匹配执行顺序、防盗链、缓存过期时间、alias别名设置以及文件禁止下载等总结
https://www.ysidc.top 西数超哥博客,数据库,西数超哥,虚拟主机,域名注册,域名,云服务器,云主机,云建站,ysidc.top







![[转]Linux系统防CC攻击自动拉黑IP增强版Shell脚本_西数超哥博客](https://www.ysidc.top/wp-content/uploads/2019/10/7b18603d328c56bb35db7f04a2a6a315-480x300.png)
