Plugin Config

描述

在很多情况下,我们在不同的路由中会使用相同的插件规则,此时就可以通过 Plugin Config 来设置这些规则。Plugin Config 属于一组通用插件配置的抽象。

plugins 的配置可以通过 Admin API /apisix/admin/plugin_configs 进行单独配置,在路由中使用 plugin_config_id 与之进行关联。

对于同一个插件的配置,只能有一个是有效的,优先级为 Consumer > Route > Plugin Config > Service。

使用示例

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

  1. 创建 Plugin config。

    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 limit-count plugin",
    5. "plugins": {
    6. "limit-count": {
    7. "count": 2,
    8. "time_window": 60,
    9. "rejected_code": 503
    10. }
    11. }
    12. }'
  2. 创建路由并绑定 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 原有的插件配置。详细信息,请参考 Plugin

  1. 假设你创建了一个 Plugin Config。

    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. }'
  2. 并在路由中引入 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. }'
  3. 最后实现的效果如下。

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