location 命令
= /pattern 精确度最高 等于某个字符(
pattern 被限制成简单的字符串,也就是说这里不能使用正则表达式。
阻止继续搜索正则location
)
匹配情况: http://website.com/abcd # 正好完全匹配 http://website.com/ABCD # 如果运行 Nginx server 的系统本身对大小写不敏感,比如 Windows ,那么也匹配
http://website.com/abcd?param1¶m2 # 忽略查询串参数(query string arguments),这里就是 /abcd 后面的 ?param1¶m2
http://website.com/abcd/ # 不匹配,因为末尾存在反斜杠(trailing slash),Nginx 不认为这种情况是完全匹配
http://website.com/abcde # 不匹配,因为不是完全匹配
~ 正则表达式 区分大小写匹配
~* 不区分大小写匹配
@ 声明一个location 主要用来内部重定向
^~ 如果这个正则匹配到了字符,后面的正则匹配都不会再去匹配了。(
匹配到了“普通location ”后,不再需要继续匹配“正则location ”了,要做到这一 点只要在“普通location ”前面加上“^~ ”符号(^ 表示“非”,~ 表示“正 则”,字符意思是:不要继续匹配正则)。
)
对于一个特定的 HTTP 请求( a particular query ), nginx 应该匹配哪个 location 块的指令呢(注意:我们在 nginx.conf 配置文件里面一般会定义多个 location 的)?匹配 规则是:先匹配普通location (再匹配正则表达式)
例如:
location = /index.php{
//在访问index.php的时候才会触发这里面的内容
}
location ~ index.php{
//
}
@符号
error_page 404 = @fallback;
location @fallback {
proxy_pass http://www.baidu.com;
}
2、文件及目录匹配
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行
3 rewrite 重写
rewrite $uri (.*)$ index.php/$1 (break|last|redirect|permanent)
. rewrite break - url重写后,直接使用当前资源,不再执行location里余下的语句,完成本次请求,地址栏url不变 2. rewrite last - url重写后,马上发起一个新的请求,再次进入server块,重试location匹配,超过10次匹配不到报500错误,地址栏url不变 3. rewrite redirect – 返回302临时重定向,地址栏显示重定向后的url,爬虫不会更新url(因为是临时) 4. rewrite permanent – 返回301永久重定向, 地址栏显示重定向后的url,爬虫更新url
使用last会对server标签重新发起请求
如果location中rewrite后是对静态资源的请求,不需要再进行其他匹配,一般要使用break或不写,直接使用当前location中的数据源,完成本次请求 如果location中rewrite后,还需要进行其他处理,如动态fastcgi请求(.php,.jsp)等,要用last继续发起新的请求 (根的location使用last比较好, 因为如果有.php等fastcgi请求还要继续处理)
使用alias指定源:必须使用last
if语句主要用来判断一些在rewrite语句中无法直接匹配的条件,比如检测文件存在与否,http header,cookie等