Location规则和if判断

Location匹配优先级和实例

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



location = / {
# 只匹配 / 查询。
}
location / {
# 匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配。
}
location ^~ /p_w_picpaths/ {
# 匹配任何已 /p_w_picpaths/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
}
location ~*.(gif|jpg|jpeg)$ {
# 匹配任何已 gif、jpg 或 jpeg 结尾的请求。
}
location ~*.(gif|jpg|swf)$ {
valid_referers none blocked start.igrow.cn sta.igrow.cn;
if ($invalid_referer) {
#防盗链
rewrite ^/ http://$host/logo.png;
}
}

正则去除前缀

    location ~^/data-display/  {
        if ($request_method = OPTIONS ) {
            return 200;
        } 
         rewrite ^/data-display/(.*) /$1 break;
         proxy_pass    http://data-display;
    }

if判断嵌套

例:根据uri的参数进行灰度流量控制,重写URI代理到upstream ```

# 判断uri参数里appkey的参数以0-9、a-b结尾触发uri的rewrite规则,比如将请求/api/goods修改为/open-api/goods
#最后的last表示修改URL后继续执行nginx文件,继续使用Nginx配置文件下面的Location匹配路由
if ($arg_appkey ~* ^(.*)([0-9|[a-b])$) {
            rewrite ^/api/goods?$  /open-api/goods last;
}
location ^~ /open-api/ {
    # go-open-api nginx
    proxy_pass http://openapiv2;
}

```

Copyright © 运维知识库 all right reserved,powered by Gitbook文件修订时间: 2023-10-09 10:47:52

results matching ""

    No results matching ""