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.

InformationsquelleAutor yacov | 2014-10-01
Schreibe einen Kommentar