nginx配置-location

  • 以 =开头表示精确匹配
    如 A 中只匹配根目录结尾的请求,后面不能带任何字符串。
  • ^~ 开头表示uri以某个常规字符串开头,不是正则匹配
  • ~ 开头表示区分大小写的正则匹配;
  • ~* 开头表示不区分大小写的正则匹配
  • / 通用匹配, 如果没有其它匹配,任何请求都会匹配到

顺序优先级:

(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)

 测试:

1.

        location = /api {
          #精确匹配
          return 402;
        }
    
        location /api {
            # 匹配任何以 /api 开头的地址,匹配符合以后,还要继续往下搜索
            # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
            return 403;
        }

请求http://localhost:8090/api, 返回:402 Payment Required

请求http://localhost:8090/api/a,返回:403 Forbidden

(location =) > (location 完整路径)

2.

        location ^~ /api/ {
            # 匹配任何以 /api/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。
            return 401;
        }
        
        location /api {
            return 403;
        }

注意这里 location ^~ /api/ 和 location /api  不能相同,若 location /api 改成 location /api/,启动会报错,nginx: [emerg] duplicate location "/api/"

请求http://localhost:8090/api, 返回:403 Forbidden

请求http://localhost:8090/api/a,返回:401 Authorization Required

 (location 完整路径) > (location ^~ 路径)

3.

        location ^~ /api/ {
            # 匹配任何以 /api/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。
            return 401;
        }
        
        location ~ .(gif|jpg|jpeg)$ {

            return 405 ;
        }

请求http://localhost:8090/api/a.jpg, 返回:401 Authorization Required

请求http://localhost:8090/aa/a.jpg,返回:405 Not Allowed

 (location ^~ 路径) > (location ~,~* 正则顺序) 

欢迎扫码交流:

 
原文地址:https://www.cnblogs.com/gexiaoshan/p/10219844.html