You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spring Boot嵌入式Tomcat中配置mod_reqtimeout?

解决Spring Boot嵌入式Tomcat应对Slow HTTP DoS攻击的配置方案

首先得明确:mod_reqtimeout是Apache HTTP Server专属的模块,你的应用用的是Spring Boot内置的Tomcat,没法直接启用这个模块,但Tomcat有自己的对应配置来防范这类慢请求攻击,下面是具体的配置方法:

1. 通过配置文件快速配置

这是最省心的方式,直接在application.properties或application.yml里添加Tomcat相关参数:

application.properties示例:

# 连接超时:超过20秒没收到完整请求就断开
server.tomcat.connection-timeout=20000
# 最大连接数:控制Tomcat同时处理的连接上限
server.tomcat.max-connections=8192
# 等待队列大小:连接数满时,暂时排队的请求数量
server.tomcat.accept-count=100
# 异步请求超时:针对异步处理的请求设置超时
server.tomcat.async-timeout=10000

application.yml示例:

server:
  tomcat:
    connection-timeout: 20000
    max-connections: 8192
    accept-count: 100
    async-timeout: 10000

2. 自定义Tomcat Connector实现精细控制

如果需要针对请求头、请求体做更精准的超时限制,可以写个配置类自定义Tomcat的Connector:

import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.apache.catalina.connector.Connector;
import org.apache.coyote.http11.Http11NioProtocol;

@Configuration
public class TomcatCustomConfig {

    @Bean
    public WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatCustomizer() {
        return factory -> {
            factory.addConnectorCustomizers((Connector connector) -> {
                Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
                // 基础连接超时
                protocol.setConnectionTimeout(20000);
                // Socket读取超时:客户端发数据太慢就断开
                protocol.setSoTimeout(15000);
                // 读取请求头超时:防Slowloris这类慢发请求头的攻击
                protocol.setHeaderTimeout(10000);
                // 读取请求体超时:防Slow HTTP POST这类慢发请求体的攻击
                protocol.setBodyTimeout(15000);
                // 最大连接数与等待队列
                protocol.setMaxConnections(8192);
                protocol.setAcceptCount(100);
            });
        };
    }
}

这些参数的作用一目了然:就是通过限制各个阶段的超时时间,避免服务器资源被未完成的慢请求长期占用,从根源上防范DoS风险。

3. 额外防护建议

  • 搭配Spring Security做请求频率限制:比如限制同一IP的请求次数,进一步减少恶意请求的影响
  • 前端加反向代理:如果你的应用部署在Nginx或Apache这类代理后面,可以在代理层配置超时规则(比如Nginx的client_header_timeout、client_body_timeout,Apache的mod_reqtimeout),在流量到达应用前就拦截慢请求

补充说明:Acunetix的警告是针对Web服务器的,嵌入式Tomcat虽然没有mod_reqtimeout,但上面的配置能达到完全等效的防护效果。

内容的提问来源于stack exchange,提问作者Rasool Ghafari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:54:07