nginx location语法使用介绍
nginxlocation介绍
Nginx中的Location指令是NginxHttpCoreModule中重要指令。Location指令,是用来为匹配的URI进行配置,URI即语法中的”/uri/”,可以是字符串或正则表达式。但如果要使用正则表达式,则必须指定前缀。
nginxlocation语法
基本语法:location[=|~|~*|^~]/uri/{…}
=严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。
~为区分大小写匹配(可用正则表达式)
~*为不区分大小写匹配(可用正则表达式)
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配
^~如果把这个前缀用于一个常规字符串,那么告诉nginx如果路径匹配那么不测试正则表达式。
nginxlocation应用实例
location=/{ #只匹配/查询。 }
location/{ #匹配任何查询,因为所有请求都已/开头。但是正则表达式规则和长的块规则将被优先和查询匹配。 }
location^~/images/{ #匹配任何已/images/开头的任何查询并且停止搜索。任何正则表达式将不会被测试。 }
location~*\.(gif|jpg|jpeg)${ #匹配任何已gif、jpg或jpeg结尾的请求。 }
location~*\.(gif|jpg|swf)${ valid_referersnoneblockedstart.igrow.cnsta.igrow.cn; if($invalid_referer){ #防盗链 rewrite^/http://$host/logo.png; } }
location~*\.(js|css|jpg|jpeg|gif|png|swf)${ if(-f$request_filename){ #根据文件类型设置过期时间 expires1h; break; } }
location~*\.(txt|doc)${ #禁止访问某个目录 root/data/www/wwwroot/linuxtone/test; denyall; }
以下是补充:
NginxLocation基本语法
location
syntax:location[=|~|~*|^~]/uri/{…}
语法:location[=|~|~*|^~]/uri/{…}
default:no
默认:否
context:server
上下文:server
ThisdirectiveallowsdifferentconfigurationsdependingontheURI.Itcanbeconfiguredusingbothconventionalstringsandregularexpressions.Touseregularexpressions,youmustusetheprefix~*forcaseinsensitivematchand~forcasesensitivematch.
这个指令随URL不同而接受不同的结构。你可以配置使用常规字符串和正则表达式。如果使用正则表达式,你必须使用~*前缀选择不区分大小写的匹配或者~选择区分大小写的匹配。
Todeterminewhichlocationdirectivematchesaparticularquery,theconventionalstringsarecheckedfirst.Conventionalstringsmatchthebeginningportionofthequeryandarecase-sensitive-themostspecificmatchwillbeused(seebelowonhownginxdeterminesthis).Afterwards,regularexpressionsarecheckedintheorderdefinedintheconfigurationfile.Thefirstregularexpressiontomatchthequerywillstopthesearch.Ifnoregularexpressionmatchesarefound,theresultfromtheconventionstringsearchisused.
确定哪个location指令匹配一个特定指令,常规字符串第一个测试。常规字符串匹配请求的开始部分并且区分大小写,最明确的匹配将会被使用(查看下文明白nginx怎么确定它)。然后正则表达式按照配置文件里的顺序测试。找到第一个比配的正则表达式将停止搜索。如果没有找到匹配的正则表达式,使用常规字符串的结果。
Therearetwowaystomodifythisbehavior.Thefirstistousetheprefix“=”,whichmatchesanexactqueryonly.Ifthequerymatches,thensearchingstopsandtherequestishandledimmediately.Forexample,iftherequest“/”occursfrequently,thenusing“location=/”willexpeditetheprocessingofthisrequest.
有两个方法修改这个行为。第一个方法是使用“=”前缀,将只执行严格匹配。如果这个查询匹配,那么将停止搜索并立即处理这个请求。例子:如果经常发生”/”请求,那么使用“location=/”将加速处理这个请求。
Thesecondistousetheprefix^~.Thisprefixisusedwithaconventionalstringandtellsnginxtonotcheckregularexpressionsifthepathprovidedisamatch.Forinstance,“location^~/images/”wouldhaltsearchingifthequerybeginswith/images/-allregularexpressiondirectiveswouldnotbechecked.
第二个是使用^~前缀。如果把这个前缀用于一个常规字符串那么告诉nginx如果路径匹配那么不测试正则表达式。
FurthermoreitisimportanttoknowthatNGINXdoesthecomparisonnotURLencoded,soifyouhaveaURLlike“/images/%20/test”thenuse“/images//test”todeterminethelocation.
而且它重要在于NGINX做比较没有URL编码,所以如果你有一个URL链接'/images/%20/test',那么使用“images//test”限定location。
Tosummarize,theorderinwhichdirectivesarecheckedisasfollows:
总结,指令按下列顺序被接受:
1.Directiveswiththe=prefixthatmatchthequeryexactly.Iffound,searchingstops.
1.=前缀的指令严格匹配这个查询。如果找到,停止搜索。
2.Allremainingdirectiveswithconventionalstrings,longestmatchfirst.Ifthismatchusedthe^~prefix,searchingstops.
2.剩下的常规字符串,长的在前。如果这个匹配使用^~前缀,搜索停止。
3.Regularexpressions,inorderofdefinitionintheconfigurationfile.
3.正则表达式,按配置文件里的顺序。
4.If#3yieldedamatch,thatresultisused.Elsethematchfrom#2isused.
4.如果第三步产生匹配,则使用这个结果。否则使用第二步的匹配结果。
Example:
例子:
location=/{
#matchesthequery/only.
#只匹配/查询。
[configurationA]
}
location/{
#matchesanyquery,sinceallqueriesbeginwith/,butregular
#expressionsandanylongerconventionalblockswillbe
#matchedfirst.
#匹配任何查询,因为所有请求都已/开头。但是正则表达式规则和长的块规则将被优先和查询匹配。
[configurationB]
}
location^~/images/{
#matchesanyquerybeginningwith/images/andhaltssearching,
#soregularexpressionswillnotbechecked.
#匹配任何已/images/开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
[configurationC]
}
location~*".(gif|jpg|jpeg)${
#matchesanyrequestendingingif,jpg,orjpeg.However,all
#requeststothe/images/directorywillbehandledby
#ConfigurationC.
#匹配任何已gif、jpg或jpeg结尾的请求。然而所有/images/目录的请求将使用ConfigurationC。
[configurationD]
}
Examplerequests:
例子请求:
*
/->configurationA
*
/documents/document.html->configurationB
*
/images/1.gif->configurationC
*
/documents/1.jpg->configurationD
Notethatyoucoulddefinethese4configurationsinanyorderandtheresultswouldremainthesame.
注意:按任意顺序定义这4个配置结果将仍然一样。
NginxLocation语法,与简单配置
一、介绍Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engineX”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器.
二、Location语法语法:location[=|~|~*|^~]/uri/{…}
注:
1、~ 为区分大小写匹配
2、~*为不区分大小写匹配
3、!~和!~*分别为区分大小写不匹配及不区分大小写不匹配
示例一:
location /{}
匹配任何查询,因为所有请求都以/开头。但是正则表达式规则将被优先和查询匹配。
示例二:
location=/{}
仅仅匹配/
示例三:
location~*\.(gif|jpg|jpeg)${
rewrite\.(gif|jpg)$/logo.png;
}
注:不区分大小写匹配任何以gif,jpg,jpeg结尾的文件
三、ReWrite语法
last-基本上都用这个Flag。
break-中止Rewirte,不在继续匹配
redirect-返回临时重定向的HTTP状态302
permanent-返回永久重定向的HTTP状态301
1、下面是可以用来判断的表达式:
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行
2、下面是可以用作判断的全局变量
例:http://localhost:88/test1/test2/test.php
$host:localhost $server_port:88 $request_uri:http://localhost:88/test1/test2/test.php $document_uri:/test1/test2/test.php $document_root:D:\nginx/html $request_filename:D:\nginx/html/test1/test2/test.php
四、Redirect语法
server{ listen80; server_namestart.igrow.cn; indexindex.htmlindex.php; roothtml; if($http_host!~"^star\.igrow\.cn$" { rewrite^(.*)http://star.igrow.cn$1redirect; } }
五、防盗链
location~*\.(gif|jpg|swf)${ valid_referersnoneblockedstart.igrow.cnsta.igrow.cn; if($invalid_referer){ rewrite^/http://$host/logo.png; } }
六、根据文件类型设置过期时间
location~*\.(js|css|jpg|jpeg|gif|png|swf)${ if(-f$request_filename){ expires 1h; break; } }
七、禁止访问某个目录
location~*\.(txt|doc)${ root/data/www/wwwroot/linuxtone/test; denyall; }