key 是可以被用户自定义的,只需要修改插件的一行代码即可完成。并没有在插件中放开是处于安全的考虑。

下面是一个示例,在指定的 route 上开启了 limit count 插件:

你可以使用浏览器打开 dashboard:http://127.0.0.1:9080/apisix/dashboard/,通过 web 界面来完成上面的操作,先增加一个 route:

如果你需要一个集群级别的流量控制,我们可以借助 redis server 来完成。不同的 APISIX 节点之间将共享流量限速结果,实现集群流量限速。

如果启用单 redis 策略,请看下面例子:

  1. curl -i http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
  2. {
  3. "uri": "/index.html",
  4. "plugins": {
  5. "count": 2,
  6. "time_window": 60,
  7. "rejected_code": 503,
  8. "policy": "redis",
  9. "redis_host": "127.0.0.1",
  10. "redis_port": 6379,
  11. "redis_password": "password",
  12. "redis_database": 1,
  13. "redis_timeout": 1001
  14. }
  15. },
  16. "upstream": {
  17. "type": "roundrobin",
  18. "nodes": {
  19. "39.97.63.215:80": 1
  20. }
  21. }'

如果使用 策略:

  1. curl -i http://127.0.0.1:9080/index.html

响应头里面包含了 X-RateLimit-LimitX-RateLimit-Remaining,他们的含义分别是限制的总请求数和剩余还可以发送的请求数:

当你第三次访问的时候,就会收到包含 503 返回码的响应头:

  1. HTTP/1.1 503 Service Temporarily Unavailable
  2. Content-Type: text/html
  3. Content-Length: 194
  4. Connection: keep-alive
  5. Server: APISIX web server
  6. <html>
  7. <head><title>503 Service Temporarily Unavailable</title></head>
  8. <body>
  9. <center><h1>503 Service Temporarily Unavailable</h1></center>
  10. <hr><center>openresty</center>
  11. </html>

这就表示 limit count 插件生效了。

现在就已经移除了 limit count 插件了。其他插件的开启和移除也是同样的方法。