Plugin Config

描述

在很多情况下,我们在不同的路由中会使用相同的插件规则,此时就可以通过 Plugin Config 来设置这些规则。plugins 的配置可以通过 Admin API /apisix/admin/plugin_configs 进行单独配置,在路由中使用plugin_config_id 与之进行关联。插件配置属于一组通用插件配置的抽象。

配置步骤

你可以参考如下步骤将 Plugin Config 绑定在路由上。

  1. 创建 Plugin config。
  1. curl http://127.0.0.1:9180/apisix/admin/plugin_configs/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
  2. {
  3. "desc": "enable limit-count plugin",
  4. "plugins": {
  5. "limit-count": {
  6. "count": 2,
  7. "time_window": 60,
  8. "rejected_code": 503
  9. }
  10. }
  11. }'
  1. 创建路由并绑定 Plugin Config 1
  1. curl http://127.0.0.1:9180/apisix/admin/routes/1 \
  2. -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
  3. {
  4. "uris": ["/index.html"],
  5. "plugin_config_id": 1,
  6. "upstream": {
  7. "type": "roundrobin",
  8. "nodes": {
  9. "127.0.0.1:1980": 1
  10. }
  11. }
  12. }'

如果找不到对应的 Plugin config,该路由上的请求会报 503 错误。

注意事项

如果路由中已经配置了 plugins,那么 Plugin Config 里面的插件配置将会与 plugins 合并。

相同的插件不会覆盖掉 plugins 原有的插件。

例如:

  1. curl http://127.0.0.1:9180/apisix/admin/plugin_configs/1 \
  2. -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
  3. {
  4. "desc": "enable ip-restruction and limit-count plugin",
  5. "plugins": {
  6. "ip-restriction": {
  7. "whitelist": [
  8. "127.0.0.0/24",
  9. "113.74.26.106"
  10. ]
  11. },
  12. "limit-count": {
  13. "count": 2,
  14. "time_window": 60,
  15. "rejected_code": 503
  16. }
  17. }
  18. }'

在路由中引入 Plugin Config:

  1. curl http://127.0.0.1:9180/apisix/admin/routes/1 \
  2. -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
  3. {
  4. "uris": ["/index.html"],
  5. "plugin_config_id": 1,
  6. "upstream": {
  7. "type": "roundrobin",
  8. "nodes": {
  9. "127.0.0.1:1980": 1
  10. }
  11. }
  12. "plugins": {
  13. "proxy-rewrite": {
  14. "uri": "/test/add",
  15. "host": "apisix.iresty.com"
  16. },
  17. "limit-count": {
  18. "count": 20,
  19. "time_window": 60,
  20. "rejected_code": 503,
  21. "key": "remote_addr"
  22. }
  23. }
  24. }'

最后实现的效果如下:

  1. curl http://127.0.0.1:9180/apisix/admin/routes/1 \
  2. -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
  3. {
  4. "uris": ["/index.html"],
  5. "upstream": {
  6. "type": "roundrobin",
  7. "nodes": {
  8. "127.0.0.1:1980": 1
  9. }
  10. }
  11. "plugins": {
  12. "ip-restriction": {
  13. "whitelist": [
  14. "127.0.0.0/24",
  15. "113.74.26.106"
  16. ]
  17. },
  18. "proxy-rewrite": {
  19. "uri": "/test/add",
  20. "host": "apisix.iresty.com"
  21. },
  22. "limit-count": {
  23. "count": 20,
  24. "time_window": 60,
  25. "rejected_code": 503,
  26. "key": "remote_addr"
  27. }
  28. }
  29. }'