如何有效更新APISIX路由规则?修改URI后404问题排查
问题原因分析
- 旧URI返回
{"error_msg":"404 Route Not Found"}:你的PATCH请求已经成功修改了路由ID为1的uri字段,原有的旧URI对应的路由规则已不存在,APISIX找不到匹配的路由,因此返回自身的JSON格式404错误。 - 新URI返回HTML格式404:APISIX已经匹配到修改后的
/anythingg/*路由,但该路由指向的上游服务(比如教程中的httpbin)不存在/anythingg/*这个路径,所以是上游服务返回了HTML格式的404页面,而非APISIX本身的错误。
正确更新路由的解决方法
- 验证路由修改是否生效
先执行查询命令确认路由配置:
curl "http://127.0.0.1:9080/apisix/admin/routes/1" -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1"
返回结果中如果uri字段确实是/anythingg/*,说明修改成功。
- 让新URI正常工作的两种方案
- 方案一:修正URI为上游服务支持的路径
如果是误多打了一个g,直接改回原正确URI即可:
curl "http://127.0.0.1:9080/apisix/admin/routes/1" -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PATCH -d ' { "uri": "/anything/*" }'
- 方案二:配置路径重写适配上游
如果确实需要使用/anythingg/*作为访问路径,可通过APISIX的proxy-rewrite插件将请求路径重写到上游支持的/anything/*:
curl "http://127.0.0.1:9080/apisix/admin/routes/1" -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PATCH -d ' { "uri": "/anythingg/*", "plugins": { "proxy-rewrite": { "regex_uri": ["^/anythingg/(.*)", "/anything/$1"] } } }'
- 确认路由上游配置完整性
检查路由的upstream配置是否存在且正确,PATCH操作只会修改指定字段,若之前的上游配置未丢失,只需处理路径匹配问题即可。
内容的提问来源于stack exchange,提问作者Charalamm
相关产品推荐
相关产品推荐

