Hoffen Sie, dass jemand helfen kann, zu bestätigen, ob dies funktionieren soll? Ich versuche, 3 Subdomain-Datenverkehr an denselben Haproxy-Host weiterzuleiten.
Hier ist mein Setup
haproxy mit einer schnittstelle ip 10.10.10.100 und dns name haproxy01.mydomain.com
3 damit verbundene CNAME-Datensätze; sub1.mydomain.com, sub2.mydomain.com und sub3.mydomain.com
Der gesamte eingehende Verkehr ist für Port 443.
Es gibt zwei Back-End-Anwendungsserver, die beispielsweise Datenverkehr an drei Ports 8081, 8082, 8083 akzeptieren.
sub1.mydomain.com für 8081 sub2.mydomain.com für 8082 und sub3.mydomain.com für 8083
Die Anwendung erfordert SSL-Pass-Through nur für Port 8081-Verkehr, daher glaube ich, dass ich den TCP-Modus verwenden muss. Der andere Verkehr für 8082 und 8083 ist ebenfalls SSL, kann aber am Haproxy beendet werden, aber für die Tests habe ich alle TCP-Tests durchgeführt Modus.
Mein Konfigurationsabschnitt, um dies zu erreichen, ist unten;
#Application Setup
frontend mytraffic
bind *:443
mode tcp
acl host_sub1 hdr(host) -i sub1.mydomain.com
acl host_sub2 hdr(host) -i sub2.mydomain.com
acl host_sub3 hdr(host) -i sub3.mydomain.com
use_backend sub1_nodes if host_sub1
use_backend sub2_nodes if host_sub2
use_backend sub3_nodes if host_sub3
option tcplog backend sub1_nodes
mode tcp
balance roundrobin
stick-table type ip size 200k expire 30m
stick on src
server node1 10.10.10.101:8081 check
server node2 10.10.10.102:8081 check
backend sub2_nodes
mode tcp
balance roundrobin
stick-table type ip size 200k expire 30m
stick on src
server node1 10.10.10.101:8082 check
server node2 10.10.10.102:8082 check
backend sub3_nodes
mode tcp
balance roundrobin
stick-table type ip size 200k expire 30m
stick on src
server node1 10.10.10.101:8083 check
server node2 10.10.10.102:8083 check
# APPLICATION SETUP END
Wenn ich versuche, über HAproxy auf die Anwendungsserver zuzugreifen, z. B. für 8082-Datenverkehr, werden die Protokolle ausgegeben.
localhost haproxy [6097]: xxxx: 51241 [20 / Mar / 2015: 12: 19: 38.720] mytraffic mytraffic / -1 / -1 / 0 0 SC 0/0/0/0/0/0/0
schätzen einige Anweisungen bezüglich dieses Setups.
PS Ich kann hier aus Gründen der Klarheit kein Bild einbetten, da es mein erster Beitrag ist :-(
Antworten:
Im TCP-Modus dekodiert HAProxy die HTTP-Anforderung nicht, sodass Ihre
acl
Leitungen nichts tun und das Frontend niemals mit einem Backend übereinstimmen kann, wie aus den von Ihnen eingegebenen Protokollen hervorgeht: Diesmytraffic/<NOSRV>
bedeutet, dass es keine auswählen konnte Backend oder Server.Sie müssten die 3 Subdomains in zwei verschiedene Frontends mit jeweils eigenen IP-Adressen aufteilen, da sie alle über Port 443 verbunden sind. Eine für Passthrough, die andere für die SSL-Terminierung und die Inhaltsumschaltung mit
mode http
. Die Einschränkung hierbei ist, dass Sie, wenn Sie eine 4. Subdomain (sub4.mydomain.com) hinzufügen, für die ebenfalls Passthrough erforderlich ist, ein 3. Frontend und eine IP benötigen.Sie müssten auch verschiedene CNAME- oder A-Einträge in DNS erstellen, damit die richtigen Subdomains auf die richtigen IPs verweisen.
Angesichts dieser DNS-Konfiguration:
Die HAproxy-Konfiguration würde ungefähr so aussehen:
quelle
ca-file
undverify optional
für diebind
Anweisung durchführen. Wenn Sie dies getan haben, können Sie ein einzelnes Frontend an eine IP binden und dann den Inhalt zu den entsprechenden Backends wechseln, wie vom Host- Header gefordert . Um zu bestätigen, dass die gegenseitige Authentifizierung funktioniert hat, können Sie eine ACL wie erstellenacl ClientSSLValid ssl_c_verify 0
und diese dann als weitere Bedingung zu deruse_backend
Anweisung hinzufügenuse_backend sub1_nodes if host_sub1 ClientSSLValid