limit-conn

    属性

    以下示例展示了如何在指定路由上启用 limit-conn 插件,并设置 key_type"var"

    你也可以设置 key_type"var_combination"

    1. curl http://127.0.0.1:9180/apisix/admin/routes/1 \
    2. -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
    3. {
    4. "methods": ["GET"],
    5. "uri": "/index.html",
    6. "id": 1,
    7. "plugins": {
    8. "conn": 1,
    9. "burst": 0,
    10. "default_conn_delay": 0.1,
    11. "rejected_code": 503,
    12. "key_type": "var_combination",
    13. "key": "$consumer_name $remote_addr"
    14. }
    15. },
    16. "upstream": {
    17. "type": "roundrobin",
    18. "nodes": {
    19. }
    20. }
    21. }'

    测试插件

    1. curl -i http://127.0.0.1:9080/index.html?sleep=20 &
    2. curl -i http://127.0.0.1:9080/index.html?sleep=20

    当你需要禁用该插件时,可以通过以下命令删除相应的 JSON 配置,APISIX 将会自动重新加载相关配置,无需重启服务:

    1. curl http://127.0.0.1:9180/apisix/admin/routes/1 \
    2. -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
    3. {
    4. "methods": ["GET"],
    5. "uri": "/index.html",
    6. "upstream": {
    7. "type": "roundrobin",
    8. "nodes": {
    9. "127.0.0.1:1980": 1
    10. }
    11. }
    12. }'

    应用场景示例

    Apache APISIX 支持 WebSocket 代理,我们可以使用 limit-conn 插件限制 WebSocket 连接的并发数。

      1. curl http://127.0.0.1:9180/apisix/admin/routes/1 \
      2. -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
      3. "uri": "/ws",
      4. "enable_websocket": true,
      5. "plugins": {
      6. "limit-conn": {
      7. "burst": 0,
      8. "default_conn_delay": 0.1,
      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. }'

      上述路由在 /ws 上开启了 WebSocket 代理,并限制了 WebSocket 连接并发数为 1

      当 WebSocket 连接并发数超过 1 时,APISIX 将会拒绝请求,并返回 HTTP 状态码 503

      1. HTTP/1.1 101 Switching Protocols
    1. 在另一个终端中再次发起 WebSocket 请求,返回 503 HTTP 状态码表示请求将被拒绝。

      1. HTTP/1.1 503 Service Temporarily Unavailable
      2. ···
      3. <html>
      4. <head><title>503 Service Temporarily Unavailable</title></head>
      5. <body>
      6. <center><h1>503 Service Temporarily Unavailable</h1></center>
      7. <hr><center>openresty</center>
      8. </body>
      9. </html>