Re: Sharing configuration between multiple backends

2015-03-09 Thread Jonathan Matthews
On 9 March 2015 at 00:12, Thrawn shell_layer-git...@yahoo.com.au wrote:
 Hi, all.

 Is there a way to share configuration between multiple backends?

 The use case for this is that we would like to configure different response 
 headers for different parts of our application, based on the request URL, but 
 otherwise route traffic the same way. Specifically, we want to specify 
 'X-Frame-Options: ALLOW-FROM some site' across most of the application, but 
 just use 'X-Frame-Options: DENY' on the admin area.

 We could do this, of course, by sending the admin traffic to a different 
 backend, and setting the response header differently in that backend, but 
 then we'd need to repeat our server configuration, hich is otherwise the 
 same. Something like this:

 frontend foo
   listen x.x.x.x
   acl admin url_beg /admin
   default_backend foo
   use_backend foo_admin if admin

 backend foo
   rspadd X-Frame-Options: ALLOW-FROM some-trusted-server.com
   potentially
   complex
   configuration
   goes
   here

 backend foo_admin
   rspadd X-Frame-Options: DENY
   same
   configuration
   goes
   here

 To reduce the duplication, is it possible to have one backend delegate to 
 another, or specify a named list of servers that can be referenced from 
 different places?

I don't know about your specific *question*, but to solve your
specific *problem*, you might just use rspadd's conditional form:

frontend foo
  acl admin url_beg /admin
  rspadd X-Frame-Options: DENY if admin
  rspadd X-Frame-Options: ALLOW-FROM some-trusted-server.com unless admin
  default_backend whatever

As per https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#rspadd.
Dictated but not tested ;-)

Jonathan



Re: Sharing configuration between multiple backends

2015-03-09 Thread Thrawn

Hi, Jonathan. Thanks for your reply.

Unfortunately we can't use a request ACL to perform actions on a response, as 
per http://marc.info/?l=haproxym=138384425604641w=1 (and our own experience 
confirms it).
The request object is not available any more when the response is being altered.

Willy's suggested approach was to use a request ACL to send traffic to a 
different backend, which can then apply the response action.
So, in the case where that backend is almost a duplicate of the first, is there 
(or should there be) some way to reduce the duplication?

Regards

Thrawn

On 2015-03-09 14:27:09, Jonathan Matthews wrote:

I don't know about your specific *question*, but to solve your
specific *problem*, you might just use rspadd's conditional form:

frontend foo
  acl admin url_beg /admin
  rspadd X-Frame-Options: DENY if admin
  rspadd X-Frame-Options: ALLOW-FROM some-trusted-server.com unless admin
  default_backend whatever

As per https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#rspadd=
.
Dictated but not tested ;-)

Jonathan



Sharing configuration between multiple backends

2015-03-08 Thread Thrawn

Hi, again. Looks like I forgot to put a subject header last time I sent this, 
so I'm guessing it was lost in the spam.

Original:
Hi, all.

Is there a way to share configuration between multiple backends?

The use case for this is that we would like to configure different response 
headers for different parts of our application, based on the request URL, but 
otherwise route traffic the same way. Specifically, we want to specify 
'X-Frame-Options: ALLOW-FROM some site' across most of the application, but 
just use 'X-Frame-Options: DENY' on the admin area.

We could do this, of course, by sending the admin traffic to a different 
backend, and setting the response header differently in that backend, but then 
we'd need to repeat our server configuration, hich is otherwise the same. 
Something like this:

frontend foo
  listen x.x.x.x
  acl admin url_beg /admin
  default_backend foo
  use_backend foo_admin if admin

backend foo
  rspadd X-Frame-Options: ALLOW-FROM some-trusted-server.com
  potentially
  complex
  configuration
  goes
  here

backend foo_admin
  rspadd X-Frame-Options: DENY
  same
  configuration
  goes
  here

To reduce the duplication, is it possible to have one backend delegate to 
another, or specify a named list of servers that can be referenced from 
different places?

Thanks in advance.

Thrawn