Whoops!

Just to be safe, here's the whole thing again, with additions


--------8< snip ----------------
frontend httpweb
    bind *:80
    bind *:443 ssl crt /etc/ssl/private/primal_bundle_2014.pem
    mode http
    option httplog

    acl host_about hdr_end(host) -i about.site.com

    acl host_api hdr_end(host) -i api.site.com
    acl require_ssl hdr_end(host) -i api.site.com

    acl host_error hdr_end(host) -i error.site.com
    acl require_nossl hdr_end(host) -i error.site.com

    redirect scheme https if !{ ssl_fc } require_ssl
    redirect scheme http  if  { ssl_fc } require_nossl

    use backend about:3000 if host_about
    use backend api:80 if host_api
    use_backend nginx:8080 if host_error


backend about:3000
    mode http
    balance roundrobin
    option httplog
    #option httpclose
    option forwardfor
    server about.backend.com about.backend.com:3000 check inter 5000

backend api:80
    mode http
    balance roundrobin
    option httplog
    #option httpclose
    option forwardfor
    server api.backend.com api.backend.com:80 check inter 5000

backend about:3001
    mode http
    balance roundrobin
    option httplog
    #option httpclose
    option forwardfor
    server about.backend.com about.backend.com:3001 check inter 5000

backend nginx:8080
    mode http
    balance roundrobin
    option httplog
    #option httpclose
    option forwardfor
    server localhost localhost:8080 check inter 5000
--------8< snip ----------------



Basically, all our backends except host_about and host_error go through
SSL.  host_error is forced to HTTP, host_about is kept at whatever the
client requests.


<http://api.site.com>


On Wed, Jun 25, 2014 at 3:37 PM, Baptiste <[email protected]> wrote:

> On Wed, Jun 25, 2014 at 5:47 PM, Claus Strommer
> <[email protected]> wrote:
> > Hello all,
> >
> > For reasons that I'll spare you I'm working on replacing a Pound balancer
> > with HAProxy 1.5.  I am mostly happy with my configuration, except for
> one
> > thing:
> >
> > All of my backends accept http, except for a Node.js server which accepts
> > mixed http and https. This server has a login page that explicitly
> requires
> > an SSL connection by checking the local socket used for the connection.
> In
> > Pound this was done by setting the HTTPS parameter on the backend,
> however
> > from my understanding HAProxy requires that I use TCP passthrough to let
> the
> > backend handle SSL.  I am uncertain as to how I should shape the HAProxy
> > configuration to achieve this, as I would like the TCP backend to listen
> on
> > the same port as on the HTTP backend.  My (simplified) config looks thus:
> >
> >
> > --------8< snip ----------------
> > frontend httpweb
> >     bind *:80
> >     bind *:443 ssl crt /etc/ssl/private/primal_bundle_2014.pem
> >     mode http
> >     option httplog
> >
> >     acl host_about hdr_end(host) -i about.site.com
> >     acl host_api hdr_end(host) -i api.site.com
> >
> >     redirect scheme https if !{ ssl_fc } require_ssl
> >     redirect scheme http  if  { ssl_fc } require_nossl
> >
> >     use backend about:3000 if host_about
> >     use backend api:80 if host_api
> >
> > backend about:3000
> >     mode http
> >     balance roundrobin
> >     option httplog
> >     #option httpclose
> >     option forwardfor
> >     server about.backend.com about.backend.com:3000 check inter 5000
> >
> > backend api:80
> >     mode http
> >     balance roundrobin
> >     option httplog
> >     #option httpclose
> >     option forwardfor
> >     server api.backend.com api.backend.com:80 check inter 5000
> >
> > backend about:3001
> >     mode http
> >     balance roundrobin
> >     option httplog
> >     #option httpclose
> >     option forwardfor
> >     server about.backend.com about.backend.com:3001 check inter 5000
> > --------8< snip ----------------
> >
> > This of course sends the client into a redirect loop (301) if I hit e.g.
> > https://about.site.com/login , because the connection between HAProxy
> and
> > Node is non-SSL, so it redirects me back to that URL expecting the
> > subsequent connection to be HTTPS.  If I add an about:3001 backend (3001
> is
> > Node's SSL port) I of course get a 502 error because HAProxy connects to
> it
> > via non-SSL protocol.  I also tried to set the backend to tcp mode but
> that
> > failed because the frontend is http.
> >
> > So my guess is that I need to add a tcp frontend to handle specifically
> > HTTPS connections for about.site.com.  How would I go about doing that?
>  Can
> > I have both a TCP and HTTP frontend bind to the same port?  How would I
> > shape the ACLs to direct https://about.site.com to the TCP frontend, and
> > everything else to the HTTP frontend?
> >
> >
> >
> > --
> > Claus Strommer, Dev/Ops Engineering Specialist
>
>
> Hi Claus,
>
> first, I don't understand your configuration.
> You may have cut some part of it, but you cut too much :)
> We need to know the content of require_ssl and require_nossl.
> Also, the backend 3001 is not used.
>
> Maybe this could help: if you want to cipher a connection to a server,
> then simply add the keyword "ssl" on the server line.
> (check also the global parameter ssl-server-verify)
>
> Baptiste
>



-- 
Claus Strommer, Dev/Ops Engineering Specialist

Reply via email to