HAPROXY reqirep auf Host-header nicht weiterleiten
Ich habe einen web-server (eigentlich ist es ein CF-Umgebung, aber das spielt keine große Rolle) hinter einem haproxy der version 1.5-dev19 2013/06/17 akzeptiert Anfragen nur für einen bestimmten internen Domäne, nennen wir es mal: interne-Adresse.
Was bedeutet, dass HTTP-Anfragen nur funktionieren, wenn der host-header angehängt von interne-Adresse, (wie z.B.: Host: login.interne-Adresse).
Benutzer aus dem WAN Zugriff auf diese web-server eine Verbindung zu einer externen Adresse die ip-Weiterleitung an den internen server.
Aber wenn ein Benutzer Zugriff auf die externe Adresse, wird der Host-header wird mit dem Suffix externe-Adresse, und die web-server hinter der haproxy die Anforderung abgelehnt.
Fügte ich reqirep Einträge in haproxy Konfiguration:
global
log 127.0.0.1 syslog info
daemon
user vcap
group vcap
maxconn 64000
spread-checks 4
defaults
log global
timeout connect 30000ms
timeout client 300000ms
timeout server 300000ms
frontend http-in
mode http
bind :80
option httplog
option forwardfor
reqadd X-Forwarded-Proto:\ http
default_backend http-routers
frontend https-in
mode http
bind :443 ssl crt /var/vcap/jobs/haproxy/config/cert.pem
option httplog
option forwardfor
option http-server-close
reqadd X-Forwarded-Proto:\ https
default_backend http-routers
frontend ssl-in
mode tcp
bind :4443 ssl crt /var/vcap/jobs/haproxy/config/cert.pem
default_backend tcp-routers
backend http-routers
mode http
balance roundrobin
reqirep ^Host:\ uaa.external-address Host:\ uaa.internal-address
reqirep ^Host:\ api.external-address Host:\ api.internal-address
reqirep ^Host:\ external-address:4443 Host:\ loggregator.internal-address:4443
server node0 172.20.0.1:8888 check inter 1000
backend tcp-routers
mode tcp
balance roundrobin
reqirep ^Host:\ external-address:4443 Host:\ loggregator.internal-address:4443
server node0 172.20.0.1:8888 check inter 1000
Und jede Anforderung gesendet, um die uaa.externe-Adresse-oder api.externe-Adresse ist in der Tat geändert und die web-server hinter der haproxy die Anforderung empfängt, als ob der Host-header Suffix ist mit internen-Adresse.
Aber die 3. Regel:
reqirep ^Host:\ external-address:4443 Host:\ loggregator.internal-address:4443
Funktioniert nicht 🙁
Der web-server s access log zeigt den Host-header gesendet wird aus externe-Adresse:4443 , was bedeutet, dass die haproxy hat nicht mit dem Host-header korrekt und dann den web-server lehnt die Anfrage.
Die Aufforderung durch den AUFTRAGGEBER:
WEBSOCKET REQUEST: [2014-10-01T10:25:07+03:00]
GET /tail/?app=029a1269-67fe-46e2-85f7-e1b0b5d34193 HTTP/1.1
Host: wss://external-address:4443
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: [HIDDEN]
Origin: http://localhost
Authorization: [PRIVATE DATA HIDDEN]
Weiß jemand, was falsch mit der Regel?
EDIT:
Löschte ich die Regeln aus dem backend und erzeugt mehr generische Regeln im frontend, und es funktioniert immer noch nicht für websockets:
frontend https-in
mode http
bind :443 ssl crt /var/vcap/jobs/haproxy/config/cert.pem
option httplog
option forwardfor
option http-server-close
reqadd X-Forwarded-Proto:\ https
default_backend http-routers
reqirep ^Host:\ (.*).external-address(.*) Host:\ \1.internal-address\2
frontend ssl-in
mode tcp
bind :4443 ssl crt /var/vcap/jobs/haproxy/config/cert.pem
default_backend tcp-routers
reqirep ^Host:\ (.*).external-address(.*) Host:\ \1.internal-address\2
Vielen Dank im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Welche version von HAProxy sind Sie?
Wenn 1.4, fügen Sie bitte "- option http-server-schließen' in Ihrem Abschnitt defaults.
Standardmäßig 1.4 ist in tunnel-Modus, lassen Sie die HAProxy-analyse der ersten Anfrage und Antwort und transfer anschließenden Anfragen und Antworten als Nutzlast.
In 1.5, es sollte funktionieren out of the box. HAProxy verwendet einen neuen Modus "http-keep-alive", der es erlaubt HAProxy analysieren Sie alle die ganze Zeit zufrieden.
Baptiste