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. "limit-conn": {
    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. "127.0.0.1:1980": 1
    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

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

    1、创建路由并启用 WebSocket 代理和 limit-conn 插件。

    1. curl http://127.0.0.1:9180/apisix/admin/routes/1 \
    2. -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
    3. {
    4. "uri": "/ws",
    5. "enable_websocket": true,
    6. "plugins": {
    7. "limit-conn": {
    8. "conn": 1,
    9. "burst": 0,
    10. "default_conn_delay": 0.1,
    11. "rejected_code": 503,
    12. "key_type": "var",
    13. "key": "remote_addr"
    14. }
    15. },
    16. "upstream": {
    17. "nodes": {
    18. "127.0.0.1:1980": 1
    19. }
    20. }
    21. }'

    2、发起 WebSocket 请求,返回 101 HTTP 状态码表示连接建立成功。

    1. curl --include \
    2. --header "Connection: Upgrade" \
    3. --header "Upgrade: websocket" \
    4. --header "Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==" \
    5. --header "Sec-WebSocket-Version: 13" \
    6. --http1.1 \
    7. http://127.0.0.1:9080/ws

    3、在另一个终端中再次发起 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>

    禁用插件

    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. }'