本文主要是介绍APM服务部分接口404,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
现状部分接口404
定位问题
1. 服务器本地curl
链接请求没有问题。
2. 浏览器发起请求后服务端接收的请求是什么?
请求中的 %2F 被替换为 /
定位到问题。
路径在传递的过程中将%2F 换为 /
解决思路
nginx是否可以取得最原始的URI?
$uri , $document_uri. 两者取到的都是被替换后的结果
$require_uri 可以取得原始的请求链接
/kibana/api/apm/services/growth-sem/transaction_groups/page-load/%2Fgrowth%2Fsem/distribution?start=2021-05-10T04%3A43%3A06.530Z&end=2021-05-11T04%3A43%3A06.531Z&transactionId=21a98dbf48a61a08&traceId=91b5d56cac75988c7989f92672cbdb88&uiFiltersES=%255B%255D# 拆分
/kibana/api/apm/services/growth-sem/transaction_groups
/page-load/%2Fgrowth%2Fsem/distribution?
start=2021-05-10T04%3A43%3A06.530Z&end=2021-05-11T04%3A43%3A06.531Z&transactionId=21a98dbf48a61a08&traceId=91b5d56cac75988c7989f92672cbdb88&uiFiltersES=%255B%255D
截取请求URI转发给服务
使用lua脚本截取
string.sub(ngx.var.request_uri, 9)
将lua脚本的中变量导出到nginx
set_by_lua(_file)
语法:set_by_lua $res [ $arg1 $arg2 …]
适用上下文:server、location、location if
set_by_lua $originuri 'return string.sub(ngx.var.request_uri, 9)';
完整示例
set_by_lua $originuri 'return string.sub(ngx.var.request_uri, 9)';
proxy_pass http://galaxy_kibana/$originuri;
线上部署进行验证
完全符合预期
这篇关于APM服务部分接口404的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!