Nginx位置无法正常工作

问题描述

我有位置:

  location /api {
    proxy_pass http://api:$api_port;
  }

理论:

  • /api必须匹配
  • /api/必须匹配
  • /api/lol必须匹配
  • /apiqqqq不能匹配

实践:

  • /api匹配
  • /api/匹配
  • /api/lol匹配
  • /apiqqqq匹配(但不能匹配)

我在做什么错?如何使/apiqqqq不匹配?

解决方法

location工作正常。为了使您的逻辑正常工作,您将需要使用正则表达式或两个位置块。

例如:

location ~ ^/api(/|$) { ... }

或者:

location = /api { ... }
location /api/ { ... }

请注意,正则表达式location块的求值顺序很重要。有关详细信息,请参见this document