1.
准备与测量:确认当前网络状况与接口
先确认网卡名与带宽上限。常用命令:ip a(查看网卡,如eth0或ens3),cat /sys/class/net/eth0/speed(部分VPS不可读),使用iperf3测速:在本地或远端跑iperf3 server:iperf3 -s,然后VPS上跑:iperf3 -c
-P 4 -t 30。安装vnStat与iftop:apt install vnstat iftop -y,用vnstat实时/历史流量:vnstat -m 查看月流量,iftop -i eth0查看会话带宽分布。
2.
快速限速工具:wondershaper 一键限速
适合入门和临时限速。安装:apt install wondershaper -y(或从源码)。示例:wondershaper eth0 10240 5120 将下载限速10Mbps,上行5Mbps。取消:wondershaper clear eth0。优点简单,缺点缺乏精细策略。
3.
精细策略:tc + HTB 带宽分片与优先级
用tc搭配htb实现按类限速。示例命令(以eth0为例):tc qdisc add dev eth0 root handle 1: htb default 30; tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbit ceil 10mbit; tc class add dev eth0 parent 1:1 classid 1:10 htb rate 2mbit ceil 5mbit; tc class add dev eth0 parent 1:1 classid 1:20 htb rate 1mbit ceil 3mbit。然后用iptables打标:iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 10;tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 10 fw flowid 1:10。按端口、源IP、目的IP分流,配置合理的rate/ceil确保控制。
4.
按会话/每IP限速:nginx 与 conn/req 限制
对Web流量在应用层限流。nginx示例:http { limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s; limit_conn_zone $binary_remote_addr zone=addr:10m; server{ location /{ limit_req zone=one burst=10 nodelay; limit_conn addr 20; } } }。结合proxy_cache减少回源请求。对于下载类服务可用X-Accel-Redirect做内部限速。
5.
按日/月流量配额:统计+脚本自动封禁
用iptables计数或vnStat导出数据写脚本每日检查并封禁超额IP。思路:1) 新建自定义链:iptables -N TRAFFIC_MON; iptables -A OUTPUT -o eth0 -j TRAFFIC_MON;2) 用iptables -L TRAFFIC_MON -vnx查看字节计数,按源IP计数并写入文件;3) 每日凌晨脚本解析并对超过阈值IP执行:iptables -I INPUT -s -j DROP。示例脚本片段(伪代码):bytes=$(iptables -L TRAFFIC_MON -vnx | grep | awk '{print $2}'); if [ $bytes -gt $limit ]; then iptables -I INPUT -s $ip -j DROP; fi。注意重启规则持久化可用iptables-save/restore或iptables-persistent。
6.
减少带宽消耗的通用优化
启用gzip或Brotli压缩(nginx brotli module),启用HTTP缓存头并使用expires,开启sendfile、tcp_nopush、tcp_nodelay。对图片使用WebP或次世代格式,开启静态资源版本化并合理设置Cache-Control。对动态API使用缓存层(Redis、memcached)减轻后端流量。
7.
外部加速:使用CDN/反向代理减少源站带宽
把静态资源和大文件交由CDN(如Cloudflare、百度云加速等)负责。设置Page Rules强制缓存、缓存静态扩展名,开启“缓存一切”和按需回源。对下载类文件可生成短期签名URL,减小被滥用风险。
8.
监控与告警:部署实时可视化
部署Netdata或Prometheus+Grafana监控带宽、连接数、tcp会话。安装示例:bash <(curl -Ss https://my-netdata.io/kickstart.sh)。为关键指标设置阈值告警(如10分钟流量超限触发邮件/钉钉)。并保留流量历史用于审计和策略调整。
9.
TCP与内核优化:降低丢包与提升效率
修改sysctl以优化TCP:在/etc/sysctl.conf添加并生效sysctl -p,示例:net.core.default_qdisc=fq; net.ipv4.tcp_congestion_control=bbr; net.ipv4.tcp_fin_timeout=15; net.ipv4.tcp_tw_reuse=1。开启BBR有助于提升带宽利用率(需要内核支持)。
10.
测试与验证:如何验证策略生效
验证步骤:1) 用iperf3或speedtest-cli测试总带宽;2) 用ab或wrk模拟HTTP请求检测limit_req效果;3) curl -I 检查缓存头与压缩;4) iftop/iftop -P 实时查看会话带宽;5) 用脚本模拟超额IP确认自动封禁生效。每次改动后记录baseline指标便于回滚。
11.
安全与滥用防护:结合fail2ban与限制规则
安装fail2ban检测异常请求频率并临时封禁IP。对SSH、FTP等服务设限并换端口、使用key认证。对大量连接的IP使用iptables recent模块限制:iptables -A INPUT -p tcp --dport 80 -m recent --set --name web; iptables -A INPUT -p tcp --dport 80 -m recent --update --seconds 60 --hitcount 100 --name web -j DROP。
12.
维护与自动化:把策略写成脚本与Cron
把tc、iptables、缓存清理与配额检查写成启动脚本并放在/etc/init.d或systemd单元,定时任务做每日统计与清理:crontab -e 添加0 0 * * * /usr/local/bin/traffic_quota_check.sh。同时把重要配置与脚本存储到版本库便于回滚。
13.
问:免费香港VPS带宽通常有哪些限额和陷阱?
答:多数免费VPS提供商会限制峰值带宽、每月流量或对P2P/挖矿类行为限流。常见陷阱包括隐藏峰值上限、夜间限速或对高并发连接降速。建议先测baseline并阅读服务条款。
14.
问:如何在不给VPS付费的前提下尽量降低源站带宽消耗?
答:优先使用CDN缓存静态资源、开启gzip/brotli、启用nginx缓存、把大文件放到第三方存储(对象存储或文件服务器)、并对下载任务生成签名URL限制滥用。结合上述方法可显著降低源站带宽。
15.
问:遇到瞬时流量暴涨时,最简单的应急限速方案是什么?
答:最快方案是用wondershaper临时限速或直接用iptables配合tc按端口或IP打标并限速,同时在CDN开启“维护/限流”规则。稳定后再用HTB做精细化策略并恢复常规监控。
来源:免费香港vps带宽与流量管理优化策略详尽解析