Upstream

    上游的地址信息可以直接配置到(或服务)中。

    如上图所示,当多个路由(或服务)使用该上游时,你可以单独创建上游对象,在路由中通过使用 的方式引用资源,减轻维护压力。

    你也可以将上游的信息直接配置在指定路由或服务中,不过路由中的配置优先级更高,优先级行为与 非常相似。

    APISIX 的 Upstream 对象除了基本的负载均衡算法外,还支持对上游做主被动健康检查、重试等逻辑。更多信息,请参考 。

    1. 创建上游对象用例。

    2. 在路由中使用创建的上游对象。

      1. curl 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. "upstream_id": 1
      6. }'
    3. 为方便使用,你也可以直接把上游信息直接配置在某个路由或服务。

    以下示例是将上游信息直接配置在路由中:

    1. ```shell
    2. curl http://127.0.0.1:9180/apisix/admin/routes/1 \
    3. -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
    4. {
    5. "uri": "/index.html",
    6. "plugins": {
    7. "limit-count": {
    8. "count": 2,
    9. "time_window": 60,
    10. "rejected_code": 503,
    11. "key": "remote_addr"
    12. }
    13. },
    14. "upstream": {
    15. "nodes": {
    16. "127.0.0.1:1980": 1
    17. }
    18. }
    19. }'
    20. ```
    • 配置健康检查的示例。

      更多信息,请参考。

    以下是使用不同 hash_on 类型的配置示例:

      1. curl http://127.0.0.1:9180/apisix/admin/consumers \
      2. {
      3. "username": "jack",
      4. "plugins": {
      5. "key-auth": {
      6. "key": "auth-jack"
      7. }
      8. }
      9. }'
    1. 创建路由,启用 key-auth 插件,配置 upstream.hash_on 的类型为 consumer

      1. curl http://127.0.0.1:9180/apisix/admin/routes/1 \
      2. -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
      3. {
      4. "plugins": {
      5. "key-auth": {}
      6. },
      7. "upstream": {
      8. "nodes": {
      9. "127.0.0.1:1980": 1,
      10. "127.0.0.1:1981": 1
      11. "type": "chash",
      12. "hash_on": "consumer"
      13. },
      14. "uri": "/server_port"
      15. }'
    2. 测试请求,认证通过后的 consumer_name 将作为负载均衡哈希算法的哈希值。

    1. 创建路由并配置 的类型为 cookie

      1. curl http://127.0.0.1:9180/apisix/admin/routes/1 \
      2. -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
      3. {
      4. "uri": "/hash_on_cookie",
      5. "upstream": {
      6. "key": "sid",
      7. "type": "chash",
      8. "hash_on": "cookie",
      9. "nodes": {
      10. "127.0.0.1:1980": 1,
      11. "127.0.0.1:1981": 1
      12. }
      13. }
      14. }'
    2. 客户端请求携带 Cookie

      1. curl http://127.0.0.1:9080/hash_on_cookie \
      2. -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' \
      3. -H "Cookie: sid=3c183a30cffcda1408daf1c61d47b274"
    1. 创建路由并配置 upstream.hash_on 的类型为 headerkeycontent-type

    2. 客户端请求携带 content-typeheader

    1. curl http://127.0.0.1:9080/hash_on_header \
    2. -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' \