# 接口调用“Not Found”相关问题排查解决
# 1.发布到APIGateway的接口调用报错:404 ROUTE_NOT_FOUND
# 现象描述
- 发布到APIGateway的接口,调用网关的地址报错“404 ROUTE_NOT_FOUND"
# 原因分析与解决方案
原因分析:
- Redis未配置密码或未开启AKE事件通知。网关路由依赖Redis缓存服务器管理信息,Redis配置不当导致路由无法加载;
- 注册时选择已有前缀,但是业务地址不是之前的,业务地址是其他的,导致调用时根据前缀找不到具体的业务地址,报错:Status: 500 INTERNAL_SERVER_ERROR,"Failed to handle request[post http://x.x.x.x/test/qianzhui/xx/xx] 404 NOT_FOUND
- redis没有密码,但是gateway和portal配置文件application.properties中配置了密码,服务器管理的路由没有加载到;
- https协议接口同时发server和gateway,gateway未配置SSL信任,导致SSL握手失败;
- gateway开启了网关默认端口https,发布的接口是https,ssl证书不正确或者证书密码不正确,如图:

解决方案:
- 开启Redis事件通知:设置
notify-keyspace-events为AKE,重启Redis,重启gateway,重新发布接口或者同步服务器; - 修改前缀为新的,不要同一个前缀对应多个不同的业务地址;
- 如果没有密码,gateway和portal配置文件application.properties中将redis密码置空,如果有,确保Redis配置了正确的密码;
- 打开gateway配置文件中application.properties的spring.cloud.gateway.httpclient.ssl.useInsecureTrustManager=true;
- 正确配置,并上传上传证书到{APIGateway安装目录}/keystore下,如下图所示:

# 2.接口调用报错:The request[/xx/xx] not found
# 现象描述
- 接口发布在ESBServer,接口调用时报
java.lang.RuntimeException: The request[/api/test/notfound] not found
# 原因分析与解决方案
原因分析:
- IP地址配置不一致。startup.conf中的IP地址与Portal服务器管理中配置的IP地址不一致;
- 模型未生成。接口发布后,模型文件未正确生成到服务器磁盘,导致server无法找到接口模型;
- 代理端口被占用。server启动时,代理端口(如9090、10001)被其他程序占用,导致实际端口未启动,接口无法访问;
- 接口调用时使用的URI不正确,调用时使用的URI与注册时配置的代理URI不一致;
解决方案:
- 确保startup.conf中的IP地址与Portal服务器管理中的IP完全一致。如果是容器环境无固定IP,需配置为容器服务地址(如
0.0.0.0或具体服务名); - 重新发布接口,看发布时候有无报错,确保模型文件生成到
EOS/_srv/work目录;- 检查模型目录(
EOS/_srv/work)的所属用户和权限,确保启动用户对该目录有读写权限; - 如权限不足,修改目录所属用户或赋予适当权限:
chown -R 启动用户:启动用户组 EOS/_srv/work chmod -R 755 EOS/_srv/work - 检查模型目录(
- 重启server验证端口是否正常启动,使用命令检查端口占用情况;如被占用,可结束占用进程或在管理门户-端口管理-编辑修改ESB代理端口;
netstat -anp | grep 端口号 - 确认调用时候传的URL和注册时候的一致,uri末尾不要多加或者少/.
# 3.接口调用报错:Status: 404 NOT_FOUND,"error": "Not Found"
# 现象描述
- 接口发布在ESBServer,调用报错:Status: 404 NOT_FOUND,"error": "Not Found"
# 原因分析与解决方案
原因分析: 代理URL格式错误或者地址配置错误。接口注册时配置的业务地址与原业务地址不一致:
- 如配置时多加或者少加了一层uri;
- 遗漏末尾斜杠(/)或多加末尾斜杠(/),导致请求路径与原业务路径不匹配,调用时找不到对应接口。
解决方案:
- 检查配置的业务uri与源uri是否完全一致,没有多出或者漏掉配置。
- 检查代理地址是否缺少或者多了末尾斜杠(/),补充完整。
# 4.从外网调用代理接口,配置了nginx代理的对外地址,接口调用报错404
# 现象描述
- 集群环境,外网调用需要走nginx负载后的地址,在服务器组管理中配置了对外地址和端口,调用接口依旧报错404.
# 原因分析与解决方案
原因分析: 端口配置分离不当。服务器组同时配置了地址和端口,但iPaaS要求地址和端口分开配置,导致路由解析错误。
解决方案: 规范端口配置。
- 服务器组地址配置为
http://IP地址(不带端口)。 - 对外端口在管理门户-端口管理-对外端口中配置,确保负载均衡器转发时保留端口信息。
# 5. 通过nginx负载,调用接口报错502
# 现象描述
- 调用接口一直报502
# 原因分析与解决方案
原因分析: nginx配置错误。nginx转发配置不正确,或nginx与server之间网络不通,导致502错误。
解决方案: 排查nginx问题。
- 查看nginx错误日志(通常位于
/var/log/nginx/error.log)。 - 确认nginx与server之间网络连通性:
telnet server_ip server_port。 - 检查nginx配置文件,确保upstream和后端地址正确。
- 修正配置后重启nginx。
# 6. 接口调用报错401,提示未授权
# 现象描述
- 接口调用报错:响应返回码是401,报文提示未授权
# 原因分析与解决方案
原因分析: 业务服务需要basic认证,调用时返回401,提示未授权。调用请求中未在请求头中传递Basic认证信息,服务端无法验证身份。
解决方案:
- 在请求头中添加
Authorization参数,值为Basic base64(用户名:密码): - 可在“请求报文转换”中配置固定头,避免每次调用手动添加,如图:
