Route

描述

Route(也称为路由)是 APISIX 中最基础和最核心的资源对象,APISIX 可以通过路由定义规则来匹配客户端请求,根据匹配结果加载并执行相应的插件,最后将请求转发给到指定的上游服务。

配置简介

路由中主要包含三部分内容:

  • 匹配规则:比如 urihostremote_addr 等等,你也可以自定义匹配规则,详细信息请参考 Route body 请求参数
  • 插件配置:你可以根据业务需求,在路由中配置相应的插件来实现功能。详细信息请参考 Pluginplugin-config
  • 上游信息:路由会根据配置的负载均衡信息,将请求按照规则转发至相应的上游。详细信息请参考 Upstream

下图示例是一些 Route 规则的实例,当某些属性值相同时,图中用相同颜色标识。

路由示例

你可以在路由中完成所有参数的配置,该方式设置容易设置,每个路由的相对独立自由度比较高。示例如下:

  1. curl -i http://127.0.0.1:9180/apisix/admin/routes/1 \
  2. -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
  3. {
  4. "uri": "/index.html",
  5. "plugins": {
  6. "limit-count": {
  7. "count": 2,
  8. "time_window": 60,
  9. "rejected_code": 503,
  10. "key_type": "var",
  11. "key": "remote_addr"
  12. }
  13. },
  14. "upstream": {
  15. "type": "roundrobin",
  16. "nodes": {
  17. "127.0.0.1:1980": 1
  18. }
  19. }
  20. }'

当你的路由中有比较多的重复配置(比如启用相同的插件配置或上游信息),你也可以通过配置 ServiceUpstream 的 ID 或者其他对象的 ID 来完成路由配置。示例如下:

  1. curl -i http://127.0.0.1:9180/apisix/admin/routes/1 \
  2. -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
  3. {
  4. "uri": "/index.html",
  5. "plugin_config_id": "123456789apacheapisix",
  6. "upstream_id": "1"
  7. }'
Route - 图2提示

APISIX 所有的资源对象的 ID,均使用字符串格式,如果使用的上游 ID、服务 ID 或其他资源对象的 ID 大于 14 个字符时,请务必使用字符串形式表示该资源对象。例如:

  1. "plugin_config_id": "1234a67891234apisix",
  2. "service_id": "434199918991639234",
  3. "upstream_id": "123456789123456789"

配置示例

以下示例创建的路由,是把 URI 为 /index.html 的请求代理到地址为 127.0.0.1:1980 的上游服务。

  1. curl http://127.0.0.1:9180/apisix/admin/routes/1 \
  2. -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
  3. {
  4. "uri": "/index.html",
  5. "upstream": {
  6. "type": "roundrobin",
  7. "nodes": {
  8. "127.0.0.1:1980": 1
  9. }
  10. }
  11. }'
  1. HTTP/1.1 201 Created
  2. Date: Sat, 31 Aug 2019 01:17:15 GMT
  3. Content-Type: text/plain
  4. Transfer-Encoding: chunked
  5. Connection: keep-alive
  6. Server: APISIX web server
  7. {"node":{"value":{"uri":"\/index.html","upstream":{"nodes":{"127.0.0.1:1980":1},"type":"roundrobin"}},"createdIndex":61925,"key":"\/apisix\/routes\/1","modifiedIndex":61925}}

当接收到成功应答后,表示该路由已成功创建。

更多信息,请参考 Admin API 的 Route 对象