如何配置Caddy超时参数,使其在65秒后终止请求执行?
解决方案:用反向代理超时或请求总超时实现需求
你提到的四个Caddy timeout参数都无法直接满足“限制请求处理总时长65秒”的需求,逐个分析:
read_body:仅管控读取客户端上传内容的时间,和PHP处理时长无关,排除。read_header:仅限制读取请求头的时间,和后端处理逻辑不相关,排除。write:是Caddy向客户端发送响应的时间限制,比如大文件下载缓慢时会触发,并非PHP处理的等待时长限制,排除。idle:是长连接模式下等待下一个请求的空闲时长,和当前请求的处理周期无关,排除。
正确的做法是使用以下两种配置之一:
1. 反向代理上游超时(推荐)
如果你的PHP服务是通过Caddy反向代理部署(比如对接PHP-FPM),直接在reverse_proxy块中设置timeout,专门限制Caddy等待PHP返回响应的时间:
yourdomain.com { reverse_proxy 127.0.0.1:9000 { # 替换为你的PHP服务地址 timeout 65s } }
该配置会在PHP处理超过65秒仍未返回时,直接由Caddy终止请求并返回504状态码,完全匹配你的需求。
2. 全局/路由级请求总超时
如果需要覆盖整个请求周期(包括读取请求、PHP处理、发送响应的全流程),可以设置request超时:
# 全局生效配置 { timeouts { request 65s } } # 或仅针对特定路由生效 yourdomain.com/api { timeouts { request 65s } reverse_proxy 127.0.0.1:9000 }
内容的提问来源于stack exchange,提问作者Bogdan Dubyk
相关产品推荐
相关产品推荐

