之前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