Managing IP request rate limits in Discourse

Discourse 实施全局每 IP 速率限制,以保护站点免受过多流量和滥用。但是,在某些合法场景下,您需要将特定 IP 列入白名单以绕过这些速率限制。本指南将介绍如何在自托管 Discourse 安装中配置速率限制的例外情况。

将 IP 地址添加到白名单

当您需要为特定 IP 或 IP 地址范围增加全局每 IP 速率限制时,您需要通过添加 DISCOURSE_MAX_REQS_PER_IP_EXCEPTIONS 环境变量来修改容器配置文件 (app.yml)。

警告:请记住,尽管变量名称中包含“IP”,但它实际上指的是“存储桶”,因此它可以是一个 IP、一个 用户,或者如果插件添加了 新的分类类型,则可能是其他内容。

添加单个 IP 地址

要将单个 IP 地址添加到白名单:

DISCOURSE_MAX_REQS_PER_IP_EXCEPTIONS: 192.168.1.100

这将使 IP 地址 192.168.1.100 免受标准速率限制规则的约束。

添加多个 IP 地址或 CIDR 范围

对于使用 CIDR 表示法的多个 IP 或 IP 地址范围,请使用 >- YAML 语法的多行格式:

DISCOURSE_MAX_REQS_PER_IP_EXCEPTIONS: >-
  10.0.0.0/24
  172.16.10.0/16
  192.168.1.50
  2001:db8:c0:ffee::/64

此配置将豁免:

  • 整个 10.0.0.0/24 网络(256 个 IP 地址)
  • 整个 172.16.10.0/16 网络(65,536 个 IP 地址)
  • 单个 IP 地址 192.168.1.50
  • 整个 2001:db8:c0:ffee::/64 网络(IPv6)

:warning: 确保 YAML 格式正确,尤其是在使用 >- 的多行语法时。

重建

修改容器配置后,您需要重建容器才能使更改生效:

cd /var/discourse
./launcher rebuild app

安全注意事项

在将 IP 地址添加到白名单时要格外小心。每个豁免的 IP 或范围都会绕过 Discourse 内置的防滥用和防过多流量保护。

最佳实践:

  • 仅将有合法业务需求的 IP 列入白名单(例如,监控服务、API 集成、受信任的合作伙伴)。
  • 使用尽可能具体的 IP 地址范围,而不是大型网络。
  • 定期审查您的白名单,并删除不再需要豁免的 IP。

请记住:过于宽松的白名单可能会使您的站点面临潜在的滥用或拒绝服务攻击。

故障排除

如果在配置例外情况后仍然遇到速率限制错误:

  1. 验证配置中使用的 IP 地址是否正确。
  2. 检查配置更改后容器是否已正确重建。
  3. 检查 Discourse 日志中与相关 IP 地址相关的速率限制消息。
  4. 如果您使用的是代理/负载均衡器,请确保它正确转发了原始客户端 IP。
5 个赞