Re: Problem: host header keeps the IP of the HAProxy server

From: Ran S <ran#sheinberg.net>
Date: Thu, 11 Aug 2011 18:22:09 +0300


I need some more help on this issue, I lost the working configuration since I added a Virtual IP to my setup:

As you can see below my machines are 104 (currently running HAProxy) and 118.
I changed the bind in the configuration, in order for HAProxy to bind to a virtual IP (I'm in the middle of trying to setup dual HAProxy for redundancy via a Virtual IP).
frontend http-in

        bind 172.31.0.103:80

But now, the reqirep rule that changed Host: 172.31.0.104 to 172.31.0.118 does not work.
I am making the request to the Virtual IP (172.31.0.103) and it stays in the Host header when its sent to the backend.

backend test_servers

        server 118 172.31.0.118:85 id 118
        reqirep ^Host:\ 172.31.0.103   Host:\ 172.31.0.118 if { srv_id 118 }
       server 104 172.31.0.104:85 id 104
       reqirep ^Host:\ 172.31.0.103   Host:\ 172.31.0.104 if { srv_id 104 }

Any ideas?

On Thu, Aug 11, 2011 at 1:53 PM, Ran S <ran#sheinberg.net> wrote:

> Ok got it! many thanks! just had to give the id as an integer instead of a
> name (118), and use srv_id 118
>
>
> On Thu, Aug 11, 2011 at 1:45 PM, Ran S <ran#sheinberg.net> wrote:
>
>> Many thanks for your help! it seems that this is the correct way, but I
>> get a parsing error when checking the file in every possible syntax I could
>> come up with
>>
>> frontend http-in
>> bind 172.31.0.104:80
>> default_backend test_servers
>>
>> backend test_servers
>> server 118 172.31.0.118:85
>> reqirep ^Host:\ 172.31.0.104 Host:\ 172.31.0.118 if {srv_id
>> imp118}
>> server 104 172.31.0.104:85
>>
>> Can you tell me the correct syntax?
>>
>> 2011/8/11 Hervé COMMOWICK <hcommowick#exosec.fr>
>>
>>> reqrep <yoursearch> <yourstring> if { srv_id <idofyourserver> }
>>>
>>> server's id can be forced with "id" keyword if needed
>>>
>>> Regards,
>>>
>>> Hervé.
>>>
>>> On Thu, 11 Aug 2011 13:22:36 +0300
>>> Ran S <ran#sheinberg.net> wrote:
>>>
>>> > Well, I have no idea if this mailing list is active, as I have gotten
>>> > no response, but I'll give it another try.
>>> >
>>> > I managed to change the Host header using ReqRep successfully.
>>> >
>>> > However, now I am in a state where one of the backends need this
>>> > change, and the other one doesn't.
>>> > How would I go about configuring this?
>>> >
>>> > If I put the two backends under one backend node, they both get the
>>> > ReqRep parameter, and then one of the servers can't work with the
>>> > replaced host header.
>>> > If I put them in two backend nodes, how can I get the frontend node to
>>> > balance between the two? this appears to be the correct way but I
>>> > can't find the right command.
>>> >
>>> > Thanks
>>> >
>>> > On Wed, Aug 10, 2011 at 5:00 PM, Ran S <ran#sheinberg.net> wrote:
>>> >
>>> > > Hello all,
>>> > >
>>> > > I am trying to use HAProxy for the following configuration:
>>> > > Two Linux servers (node1, node2) running apache (on port 85) and
>>> > > squid and acting as Proxy servers to the Internet
>>> > > I installed HAProxy on node1, and configured it to listen to port
>>> > > 80, and have the backends in their respective apache port 85.
>>> > >
>>> > > While node1 is the only active server in the backend servers list,
>>> > > I can make a request to node1:80 and it will be successfully
>>> > > redirected to the apache port and returned to me.
>>> > >
>>> > > However while node2 is the only active backend server, this flow
>>> > > will fail and I will simply get a blank page with HTTP 200.
>>> > > I think I know why that is. when sniffing on node1, I can see the
>>> > > following request flow:
>>> > >
>>> > > 1. My browser making web the request to node1:80
>>> > > 2. Node1 making the request to node2.
>>> > > But, this is where the problem comes in.
>>> > > The source IP is node1
>>> > > The Destination IP is node2
>>> > > However the Host in this request is the node1 IP address
>>> > >
>>> > > So, since node2 backend server is actually a proxy server, it will
>>> > > take the IP address from the Host header it received and make a
>>> > > request to node1 (since it has it in the request's Host header) and
>>> > > the failure will come in.
>>> > >
>>> > > So I guess what I'm asking is what would be the correct option to
>>> > > use in HAproxy in order to have this set up the right way.
>>> > >
>>> > > I copied the configuration file from one of the examples and
>>> > > trimmed it down to the very basic so I can eliminate anything
>>> > > that's causing the problems, so here it is:
>>> > >
>>> > > * global*
>>> > > * daemon*
>>> > > * maxconn 256*
>>> > > *
>>> > > *
>>> > > * defaults*
>>> > > * mode http*
>>> > > * timeout connect 5000ms*
>>> > > * timeout client 50000ms*
>>> > > * timeout server 50000ms*
>>> > > * balance roundrobin*
>>> > > * option forwardfor*
>>> > > *
>>> > > *
>>> > > * frontend http-in*
>>> > > * bind *:80*
>>> > > * default_backend servers*
>>> > > *
>>> > > *
>>> > > * backend servers*
>>> > > * server <node1name> <node1ip>:85*
>>> > >
>>> > >
>>> > > Many thanks in advance for any help! please let me know if you need
>>> > > any more information.
>>> > >
>>> > > Thanks,
>>> > > Ran
>>> > >
>>> > >
>>> > >
>>>
>>>
>>>
>>> --
>>> Hervé COMMOWICK, EXOSEC (http://www.exosec.fr/)
>>> ZAC des Metz - 3 Rue du petit robinson - 78350 JOUY EN JOSAS
>>> Tel: +33 1 30 67 60 65 - Fax: +33 1 75 43 40 70
>>> mailto:hcommowick#exosec.fr
>>>
>>
>>
>
Received on 2011/08/11 17:22

This archive was generated by hypermail 2.2.0 : 2011/08/11 17:30 CEST