GKE集群部署Elastic APM遭遇301永久重定向错误求助
解决APM客户端301永久重定向错误
问题分析
301错误表明业务服务请求https://mydomain/apm时被服务器重定向,但Node.js APM客户端默认不跟随重定向,因此抛出异常。核心原因基本是Ingress路径配置与客户端请求路径不匹配,导致Ingress自动触发路径重定向(比如强制添加尾部斜杠)。
解决方案
方案1:修正APM客户端请求路径
直接在serverUrl末尾添加尾部斜杠,匹配Ingress期望的路径格式:
var apm = require('elastic-apm-node').start({ serviceName: 'shopping', secretToken: '', // 添加尾部斜杠 serverUrl: 'https://mydomain/apm/', environment: 'production' })
方案2:调整Ingress配置(推荐)
如果APM Server通过Ingress暴露,修改Ingress规则,让不带斜杠的/apm路径也能正确匹配,避免触发301重定向。以Nginx Ingress为例:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: apm-server-ingress annotations: # 调整重写规则,兼容带/不带尾部斜杠的请求 nginx.ingress.kubernetes.io/rewrite-target: /$2 spec: rules: - host: mydomain http: paths: - path: /apm(/|$)(.*) pathType: Prefix backend: service: name: apm-server # 替换为你的APM Server服务名 port: number: 8200
方案3:开启客户端重定向跟随(临时 workaround)
如果暂时无法修改Ingress或客户端路径,可以开启APM客户端的重定向跟随功能:
var apm = require('elastic-apm-node').start({ serviceName: 'shopping', secretToken: '', serverUrl: 'https://mydomain/apm', environment: 'production', // 开启重定向跟随 followRedirects: true })
验证方法
修改配置后重启业务服务,查看日志是否还有301错误。同时可用curl测试路径有效性:
curl -v https://mydomain/apm
若返回200则路径配置正常;若仍返回301,需检查Ingress路径规则和APM Server服务端口的映射是否正确。
内容的提问来源于stack exchange,提问作者Sunil
相关产品推荐
相关产品推荐

