我有一些公开的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 的开头。如有疑问,请打开重写日志因为它会清楚地表明发生了什么以及为什么发生。