Dear List,

We have a number of applications behind HAProxy. Sometimes we need to put one of the applications in maintenance mode (i.e. display a "This page is under maintenance banner"). We achieve that with the following rules:

acl is_app1 hdr(host) app1.example.com
acl is_app2 hdr(host) app2.example.com
acl is_app3 hdr(host) app3.example.com
acl is_app4 hdr(host) app4.example.com
acl is_app5 hdr(host) app5.example.com
acl is_app6 hdr(host) app6.example.com
acl is_app7 hdr(host) app7.example.com
acl is_app8 hdr(host) app8.example.com
acl is_app9 hdr(host) app9.example.com
acl is_app0 hdr(host) app0.example.com

use_backend maintenance_page if is_app1
#use_backend maintenance_page if is_app2
#use_backend maintenance_page if is_app3
#use_backend maintenance_page if is_app4
#use_backend maintenance_page if is_app5
#use_backend maintenance_page if is_app6
#use_backend maintenance_page if is_app7
#use_backend maintenance_page if is_app8
#use_backend maintenance_page if is_app9
#use_backend maintenance_page if is_app0

Currently what we do is comment/uncomment lines manually and reload HAProxy when wanting to put app1, app2, app3... under maintenance.

This is somewhat error prone and we are looking for a way of doing this in a more sophisticated manner. Ideally someone should be able to login on a simple web page, click a button and enable/disable applications as needed.

We used to do that in the past by having several HAProxy configurations but now this would mean to have 100 config files to cover all different posibilities.

What ACLs can be used so that HAProxy does NOT need to be reloaded? We haven't been able to find matching criteria that depends on the existance of a file locally for example (or some other environment variable). I guess we could serve HTTP 200 or HTTP 503 for example (to put appX on/off) but is there a more elegant/better way?

Thank you so much

--
unai

Reply via email to