资讯动态

如何配置 Budibase Nginx 代理的 API 与 Webhook 请求速率限制

发布时间:2026/9/13 10:03:45 来源:尧图企业网站定制
如何配置 Budibase Nginx 代理的 API 与 Webhook 请求速率限制【免费下载链接】budibaseAI agents, automations and apps that run your operations. Model agnostic.项目地址: https://gitcode.com/GitHub_Trending/bu/budibase自托管 Budibase 时所有请求都先进入 Nginx 代理容器bbproxy由它对/api/与/api/webhooks/两条路由做速率限制。如果你发现 API 调用被限流返回 429或者需要收紧 Webhook 入口的突发请求调整的就是代理上的两个环境变量PROXY_RATE_LIMIT_API_PER_SECOND和PROXY_RATE_LIMIT_WEBHOOKS_PER_SECOND。下面说明限流规则在配置中如何生效以及在 docker-compose、单镜像和 Helm 三种部署方式下如何修改这两个值并验证结果。限流规则在 Nginx 配置中的定义限流定义位于 hosting/proxy/nginx.prod.conf在http块中# rate limiting limit_req_status 429; limit_req_zone $binary_remote_addr zoneratelimit:10m rate${PROXY_RATE_LIMIT_API_PER_SECOND}r/s; limit_req_zone $binary_remote_addr zonewebhooks:10m rate${PROXY_RATE_LIMIT_WEBHOOKS_PER_SECOND}r/s;要点两个limit_req_zone都以$binary_remote_addr客户端 IP为键各自占用 10m 共享内存即限流按客户端 IP 独立计数limit_req_status 429表示被限流的请求返回 429Nginx 默认是 503这是后文验证限流生效的依据${...}不是写死的值镜像基于nginx:latest的 envsubst 模板机制在容器启动时用环境变量替换见 hosting/proxy/Dockerfile。这两个 zone 分别应用在三个 location 上location /api/ { # calls to the API are rate limited with bursting limit_req zoneratelimit burst20 nodelay; ... } location /api/webhooks/ { # calls to webhooks are rate limited limit_req zonewebhooks nodelay; ... }另外/api/backups/应用导出也使用limit_req zoneratelimit burst20 nodelay即与 API 共用ratelimitzone。由此可确认常规 API 请求走ratelimitzone允许 20 个请求的突发burst20 nodelayWebhook 请求走独立的webhookszone没有 burst超限即被拒绝其他路由/app、/db/、/socket/、MinIO 文件等没有配置limit_req不受这两个变量影响。修改速率值按部署方式操作两个变量的官方默认值都在 Dockerfile 中声明hosting/proxy/Dockerfile# Default environment ENV PROXY_RATE_LIMIT_WEBHOOKS_PER_SECOND10 ENV PROXY_RATE_LIMIT_API_PER_SECOND50即默认 API 为 50 r/s、Webhook 为 10 r/s。按你的部署方式覆盖docker-compose 部署在 hosting/docker-compose.yaml 的proxy-service服务下限流值以环境变量的形式写死在environment列表中proxy-service: restart: unless-stopped ports: - ${MAIN_PORT}:10000 container_name: bbproxy image: budibase/proxy environment: - PROXY_RATE_LIMIT_WEBHOOKS_PER_SECOND10 - PROXY_RATE_LIMIT_API_PER_SECOND50 - APPS_UPSTREAM_URLhttp://app-service:4002 - WORKER_UPSTREAM_URLhttp://worker-service:4003 - MINIO_UPSTREAM_URLhttp://minio-service:9000 - COUCHDB_UPSTREAM_URLhttp://couchdb-service:5984 - RESOLVER127.0.0.11修改这两行的数值后重启代理容器即可envsubst 会在启动时把新值渲染进/etc/nginx/nginx.conf。注意 compose 文件里的值是写死的不会从.env读取。单镜像single image部署单镜像模式由 hosting/single/runner.sh 启动其中对两个变量取了与生产默认一致的默认值# Set defaults for proxy rate limiting (matching production defaults) export PROXY_RATE_LIMIT_API_PER_SECOND${PROXY_RATE_LIMIT_API_PER_SECOND:-50} export PROXY_RATE_LIMIT_WEBHOOKS_PER_SECOND${PROXY_RATE_LIMIT_WEBHOOKS_PER_SECOND:-10}之后 runner 用 envsubst 只替换这两个变量并重启 Nginxenvsubst ${PROXY_RATE_LIMIT_API_PER_SECOND} ${PROXY_RATE_LIMIT_WEBHOOKS_PER_SECOND} /etc/nginx/nginx.conf /tmp/nginx.conf mv /tmp/nginx.conf /etc/nginx/nginx.conf /etc/init.d/nginx restart因此在单镜像部署中只要在容器启动前导出这两个环境变量即可覆盖默认值不设置时保持 50 / 10。对应的 Nginx 配置模板是 hosting/single/nginx/nginx.conf其中 zone 定义与多容器版本的nginx.prod.conf相同。Helm 部署Kubernetescharts/budibase/templates/proxy-service-deployment.yaml 按条件注入这两个变量{{ if .Values.services.proxy.proxyRateLimitWebhooksPerSecond }} - name: PROXY_RATE_LIMIT_WEBHOOKS_PER_SECOND value: {{ .Values.services.proxy.proxyRateLimitWebhooksPerSecond | quote }} {{ end }} {{ if .Values.services.proxy.proxyRateLimitApiPerSecond }} - name: PROXY_RATE_LIMIT_API_PER_SECOND value: {{ .Values.services.proxy.proxyRateLimitApiPerSecond | quote }} {{ end }}在 values 中设置services.proxy.proxyRateLimitApiPerSecond与services.proxy.proxyRateLimitWebhooksPerSecond即可生效。这两个键在 charts/budibase/values.yaml 中没有给出默认值不设置时 Deployment 不注入环境变量容器回落到镜像内置默认 50 / 10要收紧限流就必须显式设置。验证限流是否生效配置中limit_req_status 429是唯一明确的超限行为定义验证围绕它进行代理存活检查。nginx.prod.conf中/health直接返回 200 与{ status: OK }可先确认代理本身可用curl -s http://代理地址:10000/health触发限流。对http://代理地址:10000/api/发起超过 zone 速率的连续请求。被限流的请求返回 429 状态码由limit_req_status 429决定未超限的请求正常转发到应用服务。查看访问日志。nginx.prod.conf的 access log 使用 JSON 格式log_format main escapejson其中包含status字段429 记录可以直接在/var/log/nginx/access.log中检索到。配置时的边界限流粒度是客户端 IP$binary_remote_addr。如果代理前面还有一层负载均衡Nginx 看到的是负载均衡的 IP所有用户会共享同一个限流配额——这一点由配置本身决定文档没有提供real_ip相关设置。Webhook zone 没有 burstAPI zone 有burst20 nodelay两者对突发流量的容忍度不同调参时不要按同一逻辑理解。/api/backups/与/api/共用ratelimitzone应用导出流量会计入 API 的配额。速率值的单位是 r/s每秒请求数zone 共享内存固定为 10m配置中不可通过变量调整。【免费下载链接】budibaseAI agents, automations and apps that run your operations. Model agnostic.项目地址: https://gitcode.com/GitHub_Trending/bu/budibase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价