nginx 匹配类似,但位置错误

nginx 匹配类似,但位置错误

我有一些公开的JSON脚本/程序,用于从服务器快速收集信息。我使用 nginx 将它们公开为原始 URL。因此,给出以下位置:

location ~ ^/api/status/? {
    rewrite ^(.*)$ /path/to/some/handler/wan.handler;
}

location ~ ^/api/status-lan/? {
    rewrite ^(.*)$ /path/to/some/handler/lan.handler;
}

为什么nginx我的status-lan调用与status位置匹配?因此我可以正常查看输出/api/status/,但如果我查看,/api/status-lan/则会得到status位置。

答案1

为什么 nginx 将我的 status-lan 调用与状态位置相匹配?

因为位置是一个正则表达式,而这个正则表达式:

location ~ ^/api/status/? {

意思是“以 /api/status 开头,后跟可选的斜杠”,匹配之后的内容无关紧要。

配置可能应该是:

location ~ ^/api/status/?$ {
    rewrite ^ /path/to/some/handler/wan.handler;
}

location ~ ^/api/status-lan/?$ {
    rewrite ^ /path/to/some/handler/lan.handler;
}

即匹配整个 URL,而不仅仅是 URL 的开头。如有疑问,请打开重写日志因为它会清楚地表明发生了什么以及为什么发生。

相关内容