我有一个运行 FreeBSD 的公共 HTTP 服务器。
Nginx 允许我限制每个连接的吞吐量,但我不想将每个 IP 限制为仅 1 个连接,因此我需要一个解决方案来限制每个 IP。Nginx 无法为我做到这一点,并且用于执行此操作的第三方模块不再维护。
由于 nginx 不是一种选择,我认为操作系统级别应该能够处理它,但所有其他问题和答案似乎都假设我知道要从哪些 IP 进行流量整形。由于我的服务器是公共 HTTP 服务器,我不想针对特定的一组 IP 进行流量整形,而是针对每个 IP 进行流量整形,并按 IP 分组。
FreeBSD 有没有什么办法可以限制所有 IP 的每个 IP 的吞吐量?
顺便说一句,我的备份解决方案是 Varnish,它似乎支持这种情况,但需要额外的软件支持。
答案1
其实是有的。它叫动态队列如果你需要优先考虑,或者动态管道你需要塑造,两者都实现虚拟网络. 可以将这两者结合起来形成真正的 CBQ 配置。
动态管道的简要示例人 8 ipfw:
一个更复杂的例子是使用每个主机限制而不是每个网络限制来限制网络上的出站流量:
ipfw add pipe 1 ip from 192.168.2.0/24 to any out ipfw add pipe 2 ip from any to 192.168.2.0/24 in ipfw pipe 1 config mask src-ip 0x000000ff bw 200Kbit/s queue 20Kbytes ipfw pipe 2 config mask dst-ip 0x000000ff bw 200Kbit/s queue 20Kbytes
我认为您还可以在 nginx 中启用 HTTP/2,从而减少每个支持 HTTP/2 的客户端使用的连接数。