- set-mark <mark>
- set-nice <nice>
- set-status <status> [reason <str>]
+ - set-timeout { client | server | tunnel } { <timeout> | <expr> }
- set-tos <tos>
- set-var(<var-name>[,<cond>...]) <expr>
- set-var-fmt(<var-name>[,<cond>...]) <fmt>
# return "503 Slow Down", custom reason
http-response set-status 503 reason "Slow Down".
+http-response set-timeout { client | server | tunnel } { <timeout> | <expr> }
+ [ { if | unless } <condition> ]
+
+ This action overrides the specified "client", "server" or "tunnel" timeout for the
+ current stream only. The timeout can be specified in millisecond or with any
+ other unit if the number is suffixed by the unit as explained at the top of
+ this document. It is also possible to write an expression which must returns
+ a number interpreted as a timeout in millisecond.
+
+ Note that the server/tunnel timeouts are only relevant on the backend side
+ and thus this rule is only available for the proxies with backend
+ capabilities. As well as client timeout is only relevant for frontend side.
+ Also the timeout value must be non-null to obtain the expected results.
+
+ Example:
+ http-response set-timeout tunnel 5s
+ http-response set-timeout server res.hdr(X-Refresh-Seconds),mul(1000)
+
http-response set-tos <tos> [ { if | unless } <condition> ]
This is used to set the TOS or DSCP field value of packets sent to the client
#REQUIRE_VERSION=2.4
-server srv_h1 -repeat 5 {
+server srv_h1 -repeat 9 {
rxreq
txresp
} -start
expect ~ "^.*timeout: 5000 3000.*$"
} -start
+syslog Slog6 -level info {
+ recv
+ expect ~ "^.*timeout: 5000 5000.*$"
+} -start
+
+syslog Slog7 -level info {
+ recv
+ expect ~ "^.*timeout: 5000 5000.*$"
+} -start
+
+syslog Slog8 -level info {
+ recv
+ expect ~ "^.*timeout: 5000 3000.*$"
+} -start
+
+syslog Slog9 -level info {
+ recv
+ expect ~ "^.*timeout: 5000 3000.*$"
+} -start
+
haproxy hap -conf {
defaults
timeout connect 5s
backend be2
mode http
server srv_h1 ${srv_h1_addr}:${srv_h1_port}
+
+ listen li4
+ mode http
+ bind "fd@${li4}"
+ log-format "timeout: %[be_server_timeout] %[cur_server_timeout]"
+ log ${Slog6_addr}:${Slog6_port} len 2048 local0 debug err
+ http-response set-timeout server 5s
+ server srv_h1 ${srv_h1_addr}:${srv_h1_port}
+
+ listen li5
+ mode http
+ bind "fd@${li5}"
+ log-format "timeout: %[fe_client_timeout] %[cur_client_timeout]"
+ log ${Slog7_addr}:${Slog7_port} len 2048 local0 debug err
+ http-response set-timeout client 5s
+ server srv_h1 ${srv_h1_addr}:${srv_h1_port}
+
+ frontend fe3
+ mode http
+ bind "fd@${fe3}"
+ log-format "timeout: %[be_server_timeout] %[cur_server_timeout]"
+ log ${Slog8_addr}:${Slog8_port} len 2048 local0 debug err
+ default_backend be1
+
+ backend be3
+ mode http
+ http-response set-timeout server int(3),mul(1000)
+ server srv_h1 ${srv_h1_addr}:${srv_h1_port}
+
+ frontend fe4
+ mode http
+ bind "fd@${fe4}"
+ log-format "timeout: %[fe_client_timeout] %[cur_client_timeout]"
+ log ${Slog9_addr}:${Slog9_port} len 2048 local0 debug err
+ http-response set-timeout client int(3),mul(1000)
+ default_backend be2
+
+ backend be4
+ mode http
+ server srv_h1 ${srv_h1_addr}:${srv_h1_port}
} -start
client c1 -connect ${hap_li1_sock} {
expect resp.status == 200
} -run
+client c6 -connect ${hap_li4_sock} {
+ txreq
+ rxresp
+ expect resp.status == 200
+} -run
+
+client c7 -connect ${hap_fe3_sock} {
+ txreq
+ rxresp
+ expect resp.status == 200
+} -run
+
+client c8 -connect ${hap_li5_sock} {
+ txreq
+ rxresp
+ expect resp.status == 200
+} -run
+
+client c9 -connect ${hap_fe4_sock} {
+ txreq
+ rxresp
+ expect resp.status == 200
+} -run
+
syslog Slog1 -wait
syslog Slog2 -wait
syslog Slog3 -wait
syslog Slog4 -wait
syslog Slog5 -wait
+syslog Slog6 -wait
+syslog Slog7 -wait
+syslog Slog8 -wait
+syslog Slog9 -wait
{ "set-status", parse_http_set_status, 0 },
{ "strict-mode", parse_http_strict_mode, 0 },
{ "track-sc", parse_http_track_sc, KWF_MATCH_PREFIX },
+ { "set-timeout", parse_http_set_timeout, 0 },
{ "wait-for-body", parse_http_wait_for_body, 0 },
{ NULL, NULL }
}