2026/4/18 16:12:43
网站建设
项目流程
如何介绍自己设计的网页,抖音seo排名软件哪个好,东莞市国外网站建设多少钱,企业网站设计师Slow HTTP DOS是一种应用层拒绝服务攻击#xff0c;主要针对HTTP协议#xff0c;攻击的成本很低#xff0c;并且能够消耗服务器端资源#xff0c;占用客户端连接数#xff0c;导致正常用户无法连接服务器。 SpringBoot 2.7.18 默认使用嵌入式 Tomcat 9.0.x#xff0c;针对…Slow HTTP DOS是一种应用层拒绝服务攻击主要针对HTTP协议攻击的成本很低并且能够消耗服务器端资源占用客户端连接数导致正常用户无法连接服务器。SpringBoot 2.7.18 默认使用嵌入式 Tomcat 9.0.x针对 Slow HTTP DOS 攻击慢请求头、慢请求体、慢读取等类型核心解决思路是通过配置 Tomcat 连接 / 请求超时、限制连接数 / 请求体大小、优化连接器参数从源头阻断慢请求占用服务器连接资源以下是可直接落地的全套配置方案包含核心配置、进阶优化、监控告警三部分适配嵌入式 Tomcat 的特性。一、核心配置application.yml/application.properties这是最基础、最核心的配置直接在 SpringBoot 的配置文件中添加无需编写 Java 代码即可覆盖 Tomcat 默认的宽松参数精准防御 Slow HTTP DOS 攻击。推荐 YAML 格式application.ymlserver:# Tomcat 连接器核心配置针对HTTP/1.1嵌入式Tomcat默认连接器tomcat:# 1. 限制最大连接数总连接数包含活跃等待根据服务器性能调整4核8G建议200-500max-connections:200# 2. 限制最大工作线程数处理请求的核心线程4核8G建议200-400max-threads:200# 3. 最小空闲线程数避免线程频繁创建销毁建议为max-threads的1/4min-spare-threads:50# 4. 连接超时时间TCP握手超时默认60000ms建议缩短至3000msconnection-timeout:3000# 5. 禁用TCP延迟开启Nagle算法提升传输效率间接减少慢连接tcp-no-delay:true# 6. 限制请求体最大大小防止超大慢请求体单位MB根据业务调整默认无限制max-http-post-size:10MB# 7. 等待队列大小连接数达max-connections时排队请求数建议100-200accept-count:100# 8. 慢请求相关核心连接器超时Tomcat 9关键参数覆盖慢读/慢写connection-linger:-1# 9. 关闭无效连接自动清理空闲超时的连接默认开启显式配置更稳妥disable-aborted-upload-cleanup:false# HTTP协议基础配置port:8080http:encoding:enabled:truecharset:UTF-8force:true# 10. 关键设置请求头读取超时Tomcat 9通过connector的属性配置核心防御Slow Headerstomcat:connector:# 读取请求头的超时时间ms超时则关闭连接建议5000ms5秒connectionTimeout:5000# 读取请求体的超时时间ms针对Slow Body与请求头超时一致即可async-timeout:5000兼容 Properties 格式application.properties# Tomcat核心连接限制 server.tomcat.max-connections200 server.tomcat.max-threads200 server.tomcat.min-spare-threads50 server.tomcat.connection-timeout3000 server.tomcat.tcp-no-delaytrue server.tomcat.max-http-post-size10485760 server.tomcat.accept-count100 # 慢请求超时核心配置 server.tomcat.connector.connectionTimeout5000 server.tomcat.connector.async-timeout5000 # 基础配置 server.port8080 server.http.encoding.enabledtrue server.http.encoding.charsetUTF-8 server.http.encoding.forcetrue核心参数说明防御 Slow HTTP DOS 的关键参数作用为什么能防御 Slow HTTP DOSconnectionTimeout请求头 / 请求体读取超时ms针对Slow Headers/Slow Body攻击者缓慢发送请求头 / 体时超时直接断开连接释放资源max-connectionsTomcat 最大总连接数限制服务器同时处理的连接数防止攻击者占满所有连接导致正常用户无法连接max-threads最大工作线程数避免慢请求占用所有处理线程保证正常请求有线程可用max-http-post-size最大请求体大小防止攻击者发送超大慢请求体持续消耗服务器 IO 和内存accept-count连接等待队列避免连接数满时直接拒绝所有请求同时限制排队的慢请求数tcp-no-delay开启 TCP 即时传输关闭 Nagle 算法避免 Tomcat 为拼接数据而缓存慢请求的字节减少资源占用二、进阶优化自定义 Tomcat 连接器Java 代码配置如果基础配置无法满足精细化需求比如区分 HTTP/HTTPS 配置、自定义超时规则可通过实现 WebServerFactoryCustomizer 接口自定义 Tomcat 连接器直接操控 Tomcat 底层参数适配更复杂的业务场景。编写自定义配置类无需 ComponentScanSpringBoot 自动扫描importorg.apache.catalina.connector.Connector;importorg.apache.coyote.http11.Http11NioProtocol;importorg.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;importorg.springframework.boot.web.server.WebServerFactoryCustomizer;importorg.springframework.context.annotation.Configuration;/** * SpringBoot 2.7.18 嵌入式Tomcat 自定义配置防御Slow HTTP DOS */ConfigurationpublicclassTomcatSlowHttpDosConfigimplementsWebServerFactoryCustomizerTomcatServletWebServerFactory{Overridepublicvoidcustomize(TomcatServletWebServerFactoryfactory){// 自定义Tomcat连接器NIO模式Tomcat 9默认性能最优factory.addConnectorCustomizers((Connectorconnector)-{// 强转为HTTP/1.1 NIO协议配置获取底层参数Http11NioProtocolprotocol(Http11NioProtocol)connector.getProtocolHandler();// 1. 核心请求读取超时覆盖Slow Headers/Slow Body优先级高于配置文件protocol.setConnectionTimeout(5000);// 5秒// 2. 响应读取超时针对Slow Read攻击者缓慢读取响应超时断开protocol.setSoTimeout(3000);// 3秒// 3. 最大连接数总连接数限制protocol.setMaxConnections(200);// 4. 最大工作线程数protocol.setMaxThreads(200);// 5. 最小空闲线程数protocol.setMinSpareThreads(50);// 6. 等待队列大小protocol.setAcceptCount(100);// 7. 禁用无效连接缓存及时清理慢连接protocol.setDisableUploadTimeout(false);// 8. 请求体最大大小10MB单位字节connector.setMaxPostSize(10*1024*1024);// 9. 请求头最大大小防止超大慢请求头8KB单位字节connector.setMaxHeaderCount(100);connector.setMaxHttpHeaderSize(8*1024);// 10. 开启TCP保活检测死连接/慢连接protocol.setSoKeepAlive(true);});// 可选设置Tomcat启动端口与配置文件一致即可factory.setPort(8080);// 可选设置上下文路径factory.setContextPath(/);}}代码配置的优势可直接操作 Tomcat 底层的Http11NioProtocol协议参数比配置文件更精细化支持多连接器配置比如同时配置 HTTP 和 HTTPS分别设置不同的超时规则可添加自定义过滤器、阀门Valve对慢请求做更灵活的拦截。三、补充防御添加请求拦截过滤器针对慢请求特征针对 Slow HTTP DOS 的典型特征请求发送速率极低、单请求耗时过长可自定义拦截过滤器在请求到达业务层前做前置拦截进一步过滤可疑慢请求。自定义慢请求拦截过滤器importorg.springframework.core.annotation.Order;importorg.springframework.stereotype.Component;importjavax.servlet.*;importjavax.servlet.http.HttpServletRequest;importjava.io.IOException;importjava.util.Enumeration;/** * 慢请求前置拦截过滤器过滤可疑Slow HTTP DOS请求 * Order(1) 表示优先级最高最先执行 */ComponentOrder(1)publicclassSlowHttpDosFilterimplementsFilter{// 最大请求头数量超过则判定为可疑请求privatestaticfinalintMAX_HEADER_COUNT100;// 单个请求头值最大长度超过则判定为可疑请求单位字符privatestaticfinalintMAX_HEADER_VALUE_LENGTH1024;OverridepublicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{HttpServletRequesthttpRequest(HttpServletRequest)request;// 1. 检查请求头数量防止攻击者发送大量慢请求头EnumerationStringheaderNameshttpRequest.getHeaderNames();intheaderCount0;while(headerNames.hasMoreElements()){StringheaderNameheaderNames.nextElement();StringheaderValuehttpRequest.getHeader(headerName);headerCount;// 检查请求头数量超限if(headerCountMAX_HEADER_COUNT){response.setStatus(400);// Bad Requestresponse.getWriter().write(Invalid request: too many headers);return;}// 检查单个请求头值过长if(headerValue!nullheaderValue.length()MAX_HEADER_VALUE_LENGTH){response.setStatus(400);response.getWriter().write(Invalid request: header value too large);return;}}// 2. 可选检查请求方法仅允许业务需要的方法屏蔽无用方法StringmethodhttpRequest.getMethod();if(!GET.equals(method)!POST.equals(method)!PUT.equals(method)!DELETE.equals(method)){response.setStatus(405);// Method Not Allowedresponse.getWriter().write(Method not allowed);return;}// 正常请求继续执行过滤器链chain.doFilter(request,response);}Overridepublicvoidinit(FilterConfigfilterConfig)throwsServletException{Filter.super.init(filterConfig);}Overridepublicvoiddestroy(){Filter.super.destroy();}}四、关键补充Tomcat 9 针对 Slow Read 的防御Slow Read 攻击攻击者建立连接后缓慢读取响应是容易被忽略的类型针对这种攻击除了上述setSoTimeoutSocket 读取超时还需注意配置protocol.setDisableUploadTimeout(false)开启上传超时检测针对 POST 请求的慢读取启用 Tomcat 的ConnectionTimeout对所有连接的读写操作做统一超时限制避免连接长时间处于 “挂起” 状态结合服务器内核参数优化Linux限制 TCP 连接的空闲时间从操作系统层面清理慢连接示例# 编辑sysctl配置vi/etc/sysctl.conf# 添加以下参数针对TCP空闲连接net.ipv4.tcp_keepalive_time600# 连接空闲10分钟后发送保活包net.ipv4.tcp_keepalive_intvl30# 保活包发送间隔30秒net.ipv4.tcp_keepalive_probes3# 连续3次未收到响应则关闭连接net.ipv4.tcp_fin_timeout30# TCP关闭握手超时30秒# 生效配置sysctl -p五、监控告警及时发现 Slow HTTP DOS 攻击防御的同时需做好监控及时发现攻击并调整参数SpringBoot 2.7.18 可通过Actuator监控 Tomcat 核心指标步骤如下1. 引入 Actuator 依赖pom.xml!-- SpringBoot 监控核心依赖 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId/dependency!-- 可选引入micrometer适配Prometheus/Grafana可视化 --dependencygroupIdio.micrometer/groupIdartifactIdmicrometer-registry-prometheus/artifactId/dependency2. 开启 Actuator 监控端点application.ymlmanagement:endpoints:web:exposure:include:tomcat,metrics,health,info# 暴露tomcat监控端点endpoint:tomcat:enabled:true# 开启Tomcat详细监控metrics:enabled:truehealth:show-details:always3. 关键监控指标访问http://ip:8080/actuator/tomcat通过该端点可查看 Tomcat 实时连接状态以下指标异常则大概率是 Slow HTTP DOS 攻击connections.active活跃连接数持续接近max-connections异常connections.pending等待队列连接数持续大于 0且居高不下异常requestCount请求总数短时间内激增且请求耗时过长异常errorCount错误请求数400/405/503 错误激增异常。4. 告警阈值建议活跃连接数 max-connections * 80%触发告警等待队列连接数 accept-count * 50%触发告警单请求平均耗时 3 秒根据业务调整且持续 5 分钟触发告警。六、配置验证与测试配置完成后可通过以下方式验证是否生效确保防御规则正常运行启动 SpringBoot 应用查看日志确认 Tomcat 连接器参数已加载Tomcat initialized with port(s): 8080 (http) Initializing ProtocolHandler [http-nio-8080] Starting ProtocolHandler [http-nio-8080]使用 curl 模拟慢请求头攻击验证超时是否生效# 分批次缓慢发送请求头模拟Slow Headerscurl-v --limit-rate 1b/s http://localhost:8080/your-api预期结果curl 连接 5 秒后被断开与connectionTimeout5000一致应用日志无报错连接资源被释放。3.查看 Actuator 监控访问http://localhost:8080/actuator/tomcat确认maxConnections、connectionTimeout等参数与配置一致。七、版本适配说明SpringBoot 2.7.18 Tomcat 9SpringBoot 2.7.18 内置 Tomcat 9.0.80上述所有配置均基于 Tomcat 9 的 API无版本兼容问题避免使用 Tomcat 8 的过时参数如maxHttpHeaderSize在 Tomcat 9 中仍可用无需替换若项目启用 HTTPS只需在自定义连接器中添加 SSL 配置上述超时 / 连接限制参数可直接复用。总结SpringBoot 2.7.18 嵌入式 Tomcat 防御 Slow HTTP DOS 的核心思路是“限制 超时 监控”基础限制通过max-connections/max-threads限制连接和线程数防止资源被占满核心超时通过connectionTimeout/soTimeout设置请求读写超时直接断开慢请求精细化控制通过自定义连接器和过滤器拦截可疑请求头 / 请求体过滤攻击特征底层保障结合 Linux 内核参数从操作系统层面清理空闲慢连接实时监控通过 Actuator 监控 Tomcat 指标及时发现攻击并调整参数。以上配置可直接在生产环境使用根据服务器性能CPU / 内存和业务量微调max-connections、max-threads等数值即可4 核 8G 服务器推荐上述默认值8 核 16G 可翻倍。