Freebsd

每個 IP 的 FreeBSD 頻寬限制

  • October 17, 2016

我有一個執行 FreeBSD 的公共 HTTP 伺服器。

Nginx 允許我限制每個連接的吞吐量,但我不想將每個 IP 限制為只有 1 個連接,因此我需要一個解決方案來限制每個 IP。Nginx 無法為我做到這一點,並且不再維護這樣做的第 3 方模組。

由於 nginx 不是一個選項,我認為作業系統級別應該能夠處理它,但所有其他問題和答案似乎都假設我知道我想要從中傳輸流量的 IP。由於我的伺服器是公共 HTTP 伺服器,我不想為一組特定的 IP 傳輸形狀,而是為每個 IP 傳輸形狀,並按 IP 分組。

FreeBSD 有什麼方法可以限制所有 IP 的每個 IP 的吞吐量?

附帶說明一下,我的備份解決方案是 Varnish,它似乎確實支持這種情況,但將是一個額外的軟體來支持。

其實是有的。如果您需要優先級,則稱為動態隊列,或者您需要調整動態管道,兩者都在DUMMYNET中實現。可以將這兩者結合起來進行真正的 CBQ 配置。

來自man 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 的客戶端使用的連接數。

引用自:https://serverfault.com/questions/809457