Wie man Rate Limiting und Connection Limits für bestimmte URLs am NetScaler realisiert, dazu hat sich unser Kollege Maximilian Leimgruber ein paar Gedanken gemacht und zwei Lösungsvorschläge erarbeitet. Nehmen wir einfach mal die zwei unbegrenzten URLs /service/test1 und /service/test2/ als Beispiel. Die Antwortzeiten bei URL /service/test1/ steigen an und wir wollen die Anzahl der Request begrenzen und der Rest soll gedropped werden. /service/test2/ hingegen soll unangetastet bleiben.
Nur mit Responder Policy: “Wenn die Zeit zum ersten Byte größer als x Millisekunden und zugleich die Anzahl der Connections größer als x ist und gegebenenfalls der Aufruf dem Pfad x entspricht, dann soll gedropped werden. Deren Action kann auf DROP oder RESET gesetzt werden.
2.) Rate Limiting Identifier: “In der Rate Limiting Identifier Policy wird definiert, wann der Grenzwert der Requests pro Zeit überschritten ist. Das gilt pro Selector, in diesem Fall also pro Pfad. Im Folgenden seht Ihr wie wir die Request Rate auf 100 pro Time Slice, also 1 pro Sekunde setzen.
3.) Responder Policy: “Diese Responder Policy muss natürlich wieder an einen LB vServer gebunden werden.”
CLI: > sh run | grep lim add stream selector ratelim_sel_url-path HTTP.REQ.URL.PATH_AND_QUERY add stream selector ratelim_sel_url HTTP.REQ.URL add ns limitIdentifier ratelim_iden_requestspermsec -threshold 100 -mode REQUEST_RATE -limitType SMOOTH -selectorName ratelim_sel_url-path add responder policy res_pol_limit-connections "SYS.VSERVER(\"lb_vs_owa.contoso.de\").RESPTIME.GT(1000) && SYS.VSERVER(\"lb_vs_owa.contoso.de\").CONNECTIONS.GT(1000) && HTTP.REQ.URL.PATH_AND_QUERY.STARTSWITH(\"/service/test1\")" DROP add responder policy res_pol_limit-requests "\n\nSYS.VSERVER(\"lb_vs_owa.contoso.de\").RESPTIME.GT(1000) && sys.check_limit(\"ratelim_iden_requestspermsec\") && HTTP.REQ.URL.PATH_AND_QUERY.STARTSWITH(\"/service/test1\")" DROP bind lb vserver lb_vs_owa.contoso.de -policyName res_pol_limit-requests -priority 100 -gotoPriorityExpression END -type REQUEST bind lb vserver lb_vs_owa.contoso.de -policyName _pol_limit-connections -priority 110 -gotoPriorityExpression END -type REQUEST