XML Dienste & Citrix Director gemeinsam hinter NetScaler

Hey NetScaler Fans

Ich habe in meiner Umgebung folgendes Szenario:
– zwei XenDesktop Controller auf welchen auch Director installiert ist
– einen Loadbalancing (LB) vServer auf dem NetScaler, welcher beide Server ansteuert

Ziel war es:
– den SSL LB vServer für XML-Anfragen zwischen Storefront und Controller zu verwenden mit Hostname = xmlxd7.domain.pit
– den gleichen SSL LB vServer für den Zugriff auf die Director Site zu verwenden mit Hostname = director.domain.pit
… bis hierher noch kein Problem, aber
– beim Zugriff auf den Hostname director.domain.pit soll der NetScaler im Bedarfsfall auf die URL /Director umleiten, aber KEINESFALLS wenn eine XML Anfrage den LB vServer erreicht

Soweit so gut, das Loadbalancing einrichten ist soweit ja mal keine Hexerei:

add server pit-xd01 192.168.100.31
add server pit-xd02 192.168.100.32

add service svc-https-pit-xd-01 pit-xd01 SSL 443
add service svc-https-pit-xd-02 pit-xd01 SSL 443

add lb vserver lb-vsrv-PIT-XD-HTTPS SSL 192.168.100.30 443 -persistenceType SOURCEIP -timeout 1440

bind lb vserver lb-vsrv-PIT-XD-HTTPS svc-https-pit-01
bind lb vserver lb-vsrv-PIT-XD-HTTPS svc-https-pit-02

add ssl certKey lb-server-cert -cert lb-server.cert -key lb-server.key
add ssl certKey PIT-CA -cert PIT-CA.cer
link ssl certKey lb-server-cert PIT-CA 
bind ssl vserver lb-vsrv-PIT-XD-HTTPS -certkeyName lb-server-cert

Im DNS müssen nun zwei Host-Einträge für den neuen vServer erstellt werden:
xmlxd7.domain.pit = 192.168.100.30
director.domain.pit = 192.168.100.30

Jetzt folgt der kniffligere Teil – die Umleitung für die Director URL.
Dies ist mit einer Responder Policy zu lösen, welche
– den Hostname überprüft (startet der Hostename mit director…?)
– prüft, ob die URL den Wert „director“ noch nicht enthält – unabhängig der GROSSklein Schreibung
– nach /director umleitet, sofern oben genannte Bedingungen zutreffen:

add responder action Resp_Act_to_Director redirect "\"/Director\"" -responseStatusCode 302

add responder policy Resp_Pol_to_Director "HTTP.REQ.HOSTNAME.STARTSWITH(\"director\") && HTTP.REQ.URL.SET_TEXT_MODE(IGNORECASE).CONTAINS(\"director\").NOT" Resp_Act_to_Director

bind lb vserver lb-vsrv-PIT-XD-HTTPS -policyName Resp_Pol_to_Director -priority 100 -gotoPriorityExpression END -type REQUEST

Mit dieser Responder Policy ist nun auch dieses Ziel erreicht.

Und als Abschluss noch dies…
Der aufmerksame Leser hat festgestellt, das der LB vServer für XML und Director auf Port 443 (HTTPS) reagiert. Bei der Eingabe geht dies jedoch des öftern mal vergessen. Dafür kann man einen weiteren LB vServer mit einer Umleitung einrichten:

add lb vserver http_redirect-director.domain.pit HTTP 192.168.100.30 80 -redirectURL "https://director.software-online.ch"

Viel Erfolg beim Nachbauen :-)

 

Skript: NS-XMLandDirector