nginx是除了apache之外的第二大服务器,由于其良好的性能,被越来越多的大公司采用,nginx的配置中,主要通过location来配置不同的请求代理,本文主要介绍localtion部分的语法。
语法
location [=||*|^~|@] /uri/ { … }
[]内为可选的匹配类型,{}内是对匹配的url如何处理
匹配类型
~ 正则匹配
~* 正则匹配。不区分大小写
^~ 普通匹配,发现匹配则不再匹配正则
= 严格匹配
@
无前缀
匹配优先级
先匹配非正则location,在匹配正则location
非正则location的匹配原则是 ** “最大前缀” ** ,即url从第一个字符开始,选择匹配数量最多的location
非正则location和正则location之间的规则是,得到非正则的最大前缀匹配结果后,如果匹配类型为”^~”,则该结果即为最终匹配结果;其它类型,则继续搜索正则location,如果有符合的正则location,则正则location为最终匹配结果。
正则location的匹配原则是按照逻辑顺序,即配置文件中靠前的location先匹配,若发现匹配项,则不再继续匹配
= 进行严格匹配,请求的url必须与location中的完全一致
分发请求
proxy_pass
将请求转发到指定端口root
请求root目录下的静态文件,可以通过index指定index文件rewirte
重定向请求,语法为”rewrite 正则表达式 url”,其中,正则表达式的子句可以在取代url中对应的部分,只能对域名后边的除去传递的参数外的字符串起作用
示例
1 | location /a/ { |
对于请求 http://yourdomain.com/a/c/d
首先匹配非正则,按照最大前缀,匹配3,之后匹配正则,4匹配,因此采用4 ,返回/root/web/a/c/d文件对于请求 http://yourdomain.com/a/b/c/
最大前缀原则,匹配3,由于匹配原则是^~,不再匹配正则,因此,返回对 http://localhost:8080/a/b/c/的请求结果对于请求 http://yourdomain.com/a/b/d/
最大前缀原则,匹配5,没有正则匹配,因此重定向至http://xxx.com/site/b/x2对于请求 http://yourdomain.com/
精确匹配6,重定向至http://xxx.com/index.html对于请求 http://yourdomain.com/c.html
最大前缀,匹配7,没有正则匹配,返回/root/web/c.html文件