timeouts Sets idle read and write timeouts, minimum transfer rates, and a maximum write chunk size for matching requests, separately from the server-wide timeouts global option. Like the server-wide read_body_idle and write_idle timeouts, these are reset after every successful read or write, so they only abort connections that stall; slow clients that keep making progress are not affected. ⚠️ This is an experimental feature. Subject to change or removal. Syntax timeouts [<matcher>] { read_timeout <duration> [<min_rate>] write_timeout <duration> [<min_rate>] max_write_chunk <size> } read_timeout is a duration value that sets how long a read from the request body may stall before the connection is aborted. The deadline is reset after every successful read. If omitted, the server-wide read_body_idle timeout applies. The optional <min_rate> is a number of bytes per second that the client must sustain, averaged from the start of reading the request body. With it, the client is allowed the read_timeout duration plus the time it would take to send the bytes received so far at min_rate, which also stops clients that send just enough data to never stall. write_timeout is a duration value that sets how long a write to the client may stall before the connection is aborted. The deadline is reset before every write. If omitted, the server-wide write_idle timeout applies. The optional <min_rate> works like the one for read_timeout, but for writes to the client. Because the rate is averaged from the start of the response, pauses between writes count against it, so avoid it for long-lived streaming responses such as server-sent events. max_write_chunk is the maximum number of bytes that a single underlying write to the client may cover, so that write_timeout applies between chunks of a large response rather than to one large write as a whole. It accepts all formats supported by go-humanize. Only has an effect when write_timeout is set. Default: 64KiB. Examples Abort uploads to /upload if they stall for more than 10 seconds, or if the client sends less than 1 KiB per second on average: example.com { timeouts /upload* { read_timeout 10s 1024 } reverse_proxy localhost:8080 } Abort downloads from /files if a write to the client stalls for more than 30 seconds, checking between chunks of at most 16 KiB: example.com { timeouts /files/* { write_timeout 30s max_write_chunk 16KiB } root * /srv file_server }