[nginx try_files的理解]
try_files $uri $uri/ /index.php
当用户请求 http://servers.blog.ustc.edu.cn/example时
这里的$uri 就是/example
try_files 会到硬盘里尝试这个文件。
如果存在名为/$root/example的文件,
就直接把这个文件的内容发送给用户。
目录中没有叫example的文件,然后就看$uri/,增加了一个/,
也就是看有没有名为/$root/example/的目录。
又找不到,就会fall back到try_files的最后一个选项/index.php
发起一个内部子请求,也就是相当于 nginx 发起一个 HTTP 请求到
http://servers.blog.ustc.edu.cn/index.php
Nginx location的匹配规则
1. ~ 波浪线表示执行一个正则匹配,区分大小写
2. ~* 表示执行一个正则匹配,不区分大小写
3. ^~ ^~ 表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录
4. = 进行普通字符精确匹配
5. @ #"@"定义一个命名的location,使用内部定向时,例如error_page,try_files
location 匹配优先级
1. = 精确匹配会第一个被处理。
如果发现精确匹配,nginx停止搜索其他匹配。
2. 普通字符匹配,正则表达式规则和长的块规则将被优先和查询匹配
也就是说如果该项匹配还需去看有没有正则表达式匹配和更长的匹配。
3. ^~ 则只匹配该规则,nginx停止搜索其他匹配,否则nginx会继续处理其他location指令
4.最后匹配理带有"~"和"~*"的指令,如果找到相应的匹配,则nginx停止搜索其他匹配
当没有正则表达式或者没有正则表达式被匹配的情况下,
那么匹配程度最高的逐字匹配指令会被使用
示例
location = / {
# 只匹配"/".
[configuration A]
}
location / {
#匹配任何请求,因为所有请求都是以"/"开始
#但是更长字符匹配或者正则表达式匹配会优先匹配
[configuration B]
}
location ^~ /images/ {
#匹配任何以 /images/开始的请求,并停止匹配其他location
[configuration C]
}
location ~*\.(gif|jpg|jpeg)${
#匹配以gif,jpg,jpeg结尾的请求.
#但是所有 /images/ 目录的请求将由 [configuration C]处理
[configuration D]
}
网友评论