家用住宅主机Linux Sentinel流量防护熔断限流

适用场景与准备

如果你家用Linux主机上跑着个人网站或API接口,担心被恶意刷流量导致系统卡死,可以用Sentinel来做防护。
Sentinel是阿里巴巴开源的流量控制组件,支持限流、熔断和系统保护。
即使不熟悉Java,按照本文步骤也能在家用主机上快速部署并生效。

你需要提前准备好:

  • 一台运行Linux(如Ubuntu 20.04+或CentOS 7+)的家用主机,并安装好Docker(sudo apt install docker.io -y)。
  • Java运行环境(JDK 8或以上),可以用java -version检查,没有的话运行sudo apt install openjdk-11-jdk -y
  • 一个Spring Boot应用(后面会给出最简单的示例)。

第一步:用Docker启动Sentinel Dashboard

Sentinel Dashboard是图形化管理界面,用来配置限流规则和查看监控。
在家用主机上用Docker启动最省事:

# 拉取镜像(版本以官方为准,此处用1.8.6示例)
docker pull bladex/sentinel-dashboard:1.8.6

# 启动容器,映射8858端口(默认控制台端口)
docker run --name sentinel-dashboard -d -p 8858:8858 bladex/sentinel-dashboard:1.8.6

启动后通过http://你的主机IP:8858访问,默认账号密码都是sentinel
登录后先不用操作,下一步让应用连上来。

第二步:创建一个带Sentinel客户端的Spring Boot应用

零基础用户可以直接使用官方提供的Demo,或者自己创建一个最简项目。
在Linux主机上任意目录创建pom.xml



    4.0.0
    com.example
    sentinel-demo
    1.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.7.18
    
    
        
            com.alibaba.csp
            sentinel-core
            1.8.6
        
        
            com.alibaba.csp
            sentinel-transport-simple-http
            1.8.6
        
    

然后创建一个Java类DemoApp.java(放在src/main/java/com/example/DemoApp.java):

package com.example;

import com.alibaba.csp.sentinel.Entry;
import com.alibaba.csp.sentinel.SphU;
import com.alibaba.csp.sentinel.slots.block.BlockException;

public class DemoApp {
    public static void main(String[] args) throws Exception {
        // 配置Dashboard地址(改成你的主机IP)
        System.setProperty("csp.sentinel.dashboard.server", "192.168.1.100:8858");
        // 应用名,在Dashboard上会显示
        System.setProperty("project.name", "home-api");

        // 模拟业务——一个受保护的资源
        while (true) {
            try (Entry entry = SphU.entry("HelloWorld")) {
                System.out.println("请求成功");
                Thread.sleep(100);
            } catch (BlockException ex) {
                System.out.println("请求被限流/熔断");
            }
        }
    }
}

用Maven编译并运行(如果没装Maven,可以用mvn clean package或者直接用javac编译,但建议提前装好Maven):

mvn clean package -DskipTests
java -jar target/sentinel-demo-1.0.0.jar

启动后回到Sentinel Dashboard,你应该能在左侧看到home-api应用,并且HelloWorld资源出现了。

第三步:配置限流与熔断规则

在Dashboard上点击home-api流控规则新增流控规则

  • 资源名:HelloWorld
  • 阈值类型:QPS
  • 单机阈值:5(表示每秒最多5次请求,超出就限流)
  • 点击新增

同样的方式,可以配置熔断规则(熔断规则新增):

  • 资源名:HelloWorld
  • 熔断策略:慢调用比例(或异常比例)
  • 最大RT:200(毫秒)
  • 比例阈值:0.5
  • 最小请求数:5
  • 统计时长:1000(毫秒)
  • 熔断时长:10(秒)

点击新增后生效。

现在你的程序会因为每秒请求超过5次而输出“请求被限流/熔断”,说明防护已生效。

避坑指南

  1. 防火墙和端口:确保家用主机防火墙允许8858端口(Dashboard)和8719端口(Sentinel客户端心跳端口)的访问。运行sudo ufw allow 8858 && sudo ufw allow 8719
  2. 内存占用:Sentinel Dashboard默认使用512MB堆内存,如果家用主机内存紧张,可以用-e JAVA_OPTS='-Xmx256m'限制Docker容器内存。
  3. 应用名称冲突:Dashboard上如果出现多个同名应用,检查project.name属性是否一致。
  4. Dashboard连不上:先确认客户端能访问Dashboard的IP和端口,用telnet 192.168.1.100 8858测试。

效果验证

运行Demo程序后,打开Dashboard的实时监控页面,可以看到HelloWorld的QPS曲线。
触发限流后,控制台会打印限流信息。
你也可以通过curl模拟请求来验证:

# 在另一终端不断发送请求(需要应用是Web服务,Demo是纯Java,此处仅演示)
# 实际生产环境可以访问Web接口
watch -n 0.1 curl http://your-app-url/hello

如果响应出现“Blocked by Sentinel”或类似错误,说明限流生效。

常见问题

Q:我家里没有Java应用,可以用Sentinel吗?
A:Sentinel是为Java设计的,如果你的服务不是Java写的,可以考虑用Nginx的limit_req模块或Linux的tc命令实现类似效果。但如果你未来打算用Java写接口,本文方法依然适用。

Q:Dashboard上一直看不到应用?
A:检查客户端启动参数中csp.sentinel.dashboard.server的IP和端口是否正确,以及防火墙是否放行。也可以查看客户端日志是否有SentinelTransport报错。

Q:配置了限流但不起作用?
A:确认阈值类型和统计窗口配置正确;对于QPS限流,确保请求频率超过阈值。可以用压力测试工具如ab持续发请求验证。

如果你正在处理自家Linux主机的流量防护需求,建议先按以上步骤部署Sentinel测试环境,熟悉后再应用到实际Web服务中。
遇到异常时优先检查防火墙和心跳连接。

分享到:
上一篇
外贸站宝塔面板服务器内存爆满清理缓存脚本
下一篇
跨境独立站宝塔面板数据库索引缺失查询缓慢修复
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意