nginx匹配位置与正则表达式

时间:2015-11-24 10:02:55

标签: regex nginx

我一直试图找出我的regex或nginx config的错误。我的nginx配置中有以下位置块

location ~ /v1/(tests|my/.*/tests|your/.*/test|our/.*/testers) {
   proxy_pass http://127.0.0.1:8000;
}

Nginx正在端口8080上运行,我有一个在端口8000上运行的简单测试Web服务器。我用以下路径测试了这个

  • http://localhost:8080/v1/tests(作品)
  • http://localhost:8080/v1/my/a1/tests(作品)
  • http://localhost:8080/v1/my/%20/tests(作品)
  • http://localhost:8080/v1/my//tests(在nginx服务器上 404 失败)
  • http://localhost:8080/v1/my/%2F/tests(在nginx服务器上 404 失败)

我想知道为什么会这样,因为我与my/.*/tests匹配,它应该匹配空字符串呢?我错过了什么吗?

感谢帮助!

1 个答案:

答案 0 :(得分:0)

nginx在执行测试(例如正则表达式)之前规范化URI。标准化过程的一部分是将连续的/折叠成单个/

结果是my/tests不是正则表达式的有效匹配。