您可以通过几种方式做到这一点。Apache 通过一个模块对此提供一些支持,但我们将展示 Linux 如何为您做到这一点,并为其他服务也这样做。这些命令是从 Jamal Hadi 的演示文稿中借鉴的,该演示文稿在下面被引用。
假设我们有两个客户,他们有 http、ftp 和流媒体音频,我们想向他们出售有限的带宽。我们在服务器本身上这样做。
客户 A 应该最多有 2 兆比特,客户 B 支付了 5 兆比特。我们通过在服务器上创建虚拟 IP 地址来分隔我们的客户。
# ip address add 188.177.166.1 dev eth0 # ip address add 188.177.166.2 dev eth0 |
由您来将不同的服务器连接到正确的 IP 地址。所有流行的守护进程都支持这一点。
我们首先将 CBQ qdisc 附加到 eth0
# tc qdisc add dev eth0 root handle 1: cbq bandwidth 10Mbit cell 8 avpkt 1000 \ mpu 64 |
然后我们为我们的客户创建类
# tc class add dev eth0 parent 1:0 classid 1:1 cbq bandwidth 10Mbit rate \ 2MBit avpkt 1000 prio 5 bounded isolated allot 1514 weight 1 maxburst 21 # tc class add dev eth0 parent 1:0 classid 1:2 cbq bandwidth 10Mbit rate \ 5Mbit avpkt 1000 prio 5 bounded isolated allot 1514 weight 1 maxburst 21 |
然后我们为我们的两个类添加过滤器
##FIXME: Why this line, what does it do?, what is a divisor?: ##FIXME: A divisor has something to do with a hash table, and the number of ## buckets - ahu # tc filter add dev eth0 parent 1:0 protocol ip prio 5 handle 1: u32 divisor 1 # tc filter add dev eth0 parent 1:0 prio 5 u32 match ip src 188.177.166.1 flowid 1:1 # tc filter add dev eth0 parent 1:0 prio 5 u32 match ip src 188.177.166.2 flowid 1:2 |
我们就完成了。
FIXME:为什么没有令牌桶过滤器?是否有默认的 pfifo_fast 回退?