nginx配置中一个不起眼字符“/“

Posted dingwen_blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx配置中一个不起眼字符“/“相关的知识,希望对你有一定的参考价值。

nginx配置中一个不起眼字符"/"

1.问题

[!DANGER]

nginx在配置proxy_pass代理转接和location时,多加少加“/”字符会产生完全不一样的效果。

2.location

[!TIP]

nginx每个location都是一个匹配目录,nginx的策略是:访问请求来时,会对访问地址进行解析,从上到下逐个匹配,匹配上就执行对应location大括号中的策略,并根据策略对请求作出相应。

# 进行精准匹配
location /dw/ { # /dw/
    proxy_pass http://127.0.0.1:8080; 
}

# 进行模糊匹配

location /dw { # /dw*
    proxy_pass http://127.0.0.1:8080; 
}

3.proxy_pass

# 情况1
location /dw/ { # http://127.0.0.1:8080/index.html
    proxy_pass http://127.0.0.1:8080/; 
}


# 情况2
location /dw/ { # http://127.0.0.1:8080/dw/index.html
    proxy_pass http://127.0.0.1:8080; 
}

# 情况3
location /dw/ { # http://127.0.0.1:8080/testindex.html
    proxy_pass http://127.0.0.1:8080/test; 
}

# 情况4
location /dw/ { # http://127.0.0.1:8080/test/index.html
    proxy_pass http://127.0.0.1:8080/test/; 
}

4.总结

[!DANGER]

location目录后加"/",只能匹配目录,不加“/”不仅可以匹配目录还对目录进行模糊匹配。而proxy_pass无论加不加“/”,代理跳转地址都直接拼接。

5.案例总结

server { 
  listen 80; 
  server_name localhost; 
  
  # http://localhost/wddd01/xxx -> http://localhost:8080/wddd01/xxx
  location /wddd01/ { 
    proxy_pass http://localhost:8080; 
  }

  # http://localhost/wddd02/xxx -> http://localhost:8080/xxx 
  location /wddd02/ { 
    proxy_pass http://localhost:8080/; 
  }

  # http://localhost/wddd03/xxx -> http://localhost:8080/wddd03*/xxx 
  location /wddd03 { 
    proxy_pass http://localhost:8080; 
  }

  # http://localhost/wddd04/xxx -> http://localhost:8080//xxx,请注意这里的双斜线,好好分析一下。
  location /wddd04 { 
    proxy_pass http://localhost:8080/; 
  }

  # http://localhost/wddd05/xxx -> http://localhost:8080/hahaxxx,请注意这里的haha和xxx之间没有斜杠,分析一下原因。
  location /wddd05/ { 
    proxy_pass http://localhost:8080/haha; 
  }

  # http://localhost/api6/xxx -> http://localhost:8080/haha/xxx 
  location /wddd06/ { 
    proxy_pass http://localhost:8080/haha/; 
  }

  # http://localhost/wddd07/xxx -> http://localhost:8080/haha/xxx 
  location /wddd07 { 
    proxy_pass http://localhost:8080/haha; 
  } 
        
  # http://localhost/wddd08/xxx -> http://localhost:8080/haha//xxx,请注意这里的双斜杠。
  location /wddd08 { 
    proxy_pass http://localhost:8080/haha/; 
  }
}

以上是关于nginx配置中一个不起眼字符“/“的主要内容,如果未能解决你的问题,请参考以下文章

nginx配置中一个不起眼字符“/“

我的天!因Nginx配置中一个不起眼"/"字符,引发了一起惨案...

Nginx配置中一个不起眼字符"/"的巨大作用,失之毫厘谬以千里

nginx配置文件里有不可见字符会影响端口启动吗

nginx.conf 忽略了 nginx-ingress 配置映射片段

java代码在片段活动中不起作用