在 Debian 上运行 Tomcat 时,“限流量”通常可以从**应用层(Tomcat 自身)和系统/网络层(反向代理、iptables、tc)**两个方向来做。下面按常见场景说明。
Tomcat 本身不适合做精确带宽限速,但可以做请求级限流。
限制单个 IP 的并发连接数(不是带宽)。
conf/server.xml 中 Host 内添加:
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow=".*"
deny=""
maxConnections="50"/>
仅限制连接数,不是流量。
例如使用 Guava / Resilience4j:
RateLimiter limiter = RateLimiter.create(100.0); // 100 QPS
适合API 限流,不是带宽控制。
location / {
proxy_pass http://127.0.0.1:8080;
limit_rate 100k; # 单连接 100KB/s
limit_rate_after 1m; # 前 1MB 不限速
}
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_req_zone $binary_remote_addr zone=req:10m rate=10r/s;
}
server {
limit_conn addr 5;
limit_req zone=req burst=10 nodelay;
}
✅ 这是 Debian + Tomcat 最推荐方案
限制 Tomcat 端口(如 8080)的出口带宽:
tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms
或配合 iptables + tc 做端口限速。
⚠️ 复杂,适合运维级别使用。
限制单 IP 对 8080 的连接速率:
iptables -A INPUT -p tcp --dport 8080 \
-m hashlimit --hashlimit-above 20/sec \
--hashlimit-mode srcip --hashlimit-name tomcat \
-j DROP
| 需求 | 推荐方式 |
|---|---|
| 限制下载速度 | Nginx limit_rate |
| 限制请求频率 | Nginx limit_req |
| 限制并发连接 | Nginx / iptables |
| 精确带宽控制 | tc |
| API 限流 | Tomcat Filter |
如果你愿意,可以告诉我:
我可以直接给你一套可复制的配置。