# # MaxRequestWorkers 50 # QS_ClientPrefer 20 # # => limit start at: 10 # => penalty for unknown (but otherwise ok): 4 # => max: 50 # => spare (at least remaining) @penalty of 4: 120/12*4 => 13 # 50-13 => block @37 INCLUDE scripts/ports EXEC ./ctl.sh restart -D QS_ClientPrefer -D LowMaxClients >/dev/null EXEC sleep 2 CLIENT 30 _REQ localhost $QS_PORT_BASE __GET /cgi-local/sleep.cgi?s=1 HTTP/1.1 __Host: localhost __Connection: keep-alive __ _EXPECT . "200 OK" _EXPECT . "done" _WAIT _CLOSE END CLIENT 7 _SLEEP 300 _REQ localhost $QS_PORT_BASE __GET /cgi-local/sleep.cgi?s=1 HTTP/1.1 __Host: localhost __Connection: keep-alive __ _EXPECT . "200 OK" _EXPECT . "done" _WAIT _CLOSE END CLIENT _SLEEP 200 _REQ localhost $QS_PORT_BASE __GET /qos?auto HTTP/1.1 __Host: localhost __Connection: keep-alive __ _EXPECT . "QS_AllConn: 31" _EXPECT . "QS_ClientPrefer;10\[\]: 31" _WAIT _CLOSE _SLEEP 2500 _REQ localhost $QS_PORT_BASE __GET /qos?auto HTTP/1.1 __Host: localhost __Connection: keep-alive __ _EXPECT . "QS_AllConn: 1" _EXPECT . "QS_ClientPrefer;10\[\]: 1" _WAIT _CLOSE END CLIENT _SLEEP 400 _EXPECT ERROR "Connection refused" _REQ localhost $QS_PORT_BASE _CLOSE _SLEEP 100 _EXPECT EXEC "mod_qos\(066\): access denied, QS_ClientPrefer rule \(penalty=4 0x00\): max=10, concurrent connections=38" _EXEC tail -2 logs/error_log END BLOCK FINALLY _EXEC ./ctl.sh stop 2>/dev/null 1>/dev/null _SLEEP 1000 _EXEC ./ctl.sh start 2>/dev/null 1>/dev/null END