指令学习

if

1
2
3
4
5
6
7
8
9
==          等值比较;
~           与指定正则表达式模式匹配时返回“真”,判断匹配与否时区分字符大小写
~*          与指定正则表达式模式匹配时返回“真”,判断匹配与否时不区分字符大小写
!~          与指定正则表达式模式不匹配时返回“真”,判断匹配与否时区分字符大小写
!~*         与指定正则表达式模式不匹配时返回“真”,判断匹配与否时不区分字符大小写
-f, !-f     判断指定的路径是否为存在且为文件
-d, !-d     判断指定的路径是否为存在且为目录
-e, !-e     判断指定的路径是否存在,文件或目录均可
-x, !-x     判断指定路径的文件是否存在且可执行

location

1
2
3
4
5
6
=   严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。
~   区分大小写匹配(可用正则表达式)
!~  区分大小写不匹配
~*  不区分大小写匹配(可用正则表达式)
!~* 不区分大小写不匹配
^~  如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式。

proxy_、upstream

rewrite

1
2
3
4
5
6
rewrite     ^/(.*)$ http://example.com/$1 permanent;

rewrite break 			url重写后,直接使用当前资源,不再执行location里余下的语句,完成本次请求,地址栏url不变
rewrite last 			url重写后,马上发起一个新的请求,再次进入server块,重试location匹配,超过10次匹配不到报500错误,地址栏url不变
rewrite redirect 		返回302临时重定向,地址栏显示重定向后的url,爬虫不会更新url(因为是临时)
rewrite permanent 		返回301永久重定向, 地址栏显示重定向后的url,爬虫会更新url

实例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
location = / {
# 只匹配 / 查询。
}

location / {
# 匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配。
}

location ^~ /p_w_picpaths/ {
# 匹配任何已 /p_w_picpaths/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
}

location ~*.(gif|jpg|jpeg)$ {
# 匹配任何已 gif、jpg 或 jpeg 结尾的请求。
}

参考