haproxy/include/types
Bertrand Jacquin 702d44f2ff MEDIUM: proxy: support use_backend with dynamic names
We have a use case where we look up a customer ID in an HTTP header
and direct it to the corresponding server. This can easily be done
using ACLs and use_backend rules, but the configuration becomes
painful to maintain when the number of customers grows to a few
tens or even a several hundreds.

We realized it would be nice if we could make the use_backend
resolve its name at run time instead of config parsing time, and
use a similar expression as http-request add-header to decide on
the proper backend to use. This permits the use of prefixes or
even complex names in backend expressions. If no name matches,
then the default backend is used. Doing so allowed us to get rid
of all the use_backend rules.

Since there are some config checks on the use_backend rules to see
if the referenced backend exists, we want to keep them to detect
config errors in normal config. So this patch does not modify the
default behaviour and proceeds this way :

  - if the backend name in the use_backend directive parses as a log
    format rule, it's used as-is and is resolved at run time ;

  - otherwise it's a static name which must be valid at config time.

There was the possibility of doing this with the use-server directive
instead of use_backend, but it seems like use_backend is more suited
to this task, as it can be used for other purposes. For example, it
becomes easy to serve a customer-specific proxy.pac file based on the
customer ID by abusing the errorfile primitive :

     use_backend bk_cust_%[hdr(X-Cust-Id)] if { hdr(X-Cust-Id) -m found }
     default_backend bk_err_404

     backend bk_cust_1
         errorfile 200 /etc/haproxy/static/proxy.pac.cust1

Signed-off-by: Bertrand Jacquin <bjacquin@exosec.fr>
2014-03-31 10:18:30 +02:00
..
acl.h MEDIUM: acl: Change the acl register struct 2014-03-17 18:06:08 +01:00
arg.h MEDIUM: http: The redirect strings follows the log format rules. 2013-12-02 23:31:33 +01:00
auth.h MAJOR: auth: Change the internal authentication system. 2014-03-17 18:06:06 +01:00
backend.h MEDIUM: backend: add support for the wt6 hash 2013-11-14 16:37:50 +01:00
capture.h [MAJOR] last bunch of capture changes for mempool v2 2007-05-13 22:46:04 +02:00
channel.h MINOR: channel: add the date of last read in the channel 2014-02-12 11:45:59 +01:00
checks.h MEDIUM: tcp-check new feature: connect 2014-02-03 00:24:11 +01:00
compression.h MEDIUM: compression: use pool for comp_ctx 2012-11-21 01:56:47 +01:00
connection.h OPTIM: ssl: implement dynamic record size adjustment 2014-02-06 11:37:29 +01:00
counters.h MINOR: stats: Enhancement to stats page to provide information of last session time. 2014-02-08 01:19:58 +01:00
fd.h MAJOR: polling: rework the whole polling system 2014-01-26 00:42:30 +01:00
freq_ctr.h [MINOR] freq_ctr: add new types and functions for periods different from 1s 2010-08-10 14:01:09 +02:00
global.h MINOR: config: make the stream interface idle timer user-configurable 2014-02-12 16:36:12 +01:00
hdr_idx.h [BUG] files were missing for hdr_idx in previous commit 2006-12-04 02:20:02 +01:00
lb_chash.h [MEDIUM] build: switch ebtree users to use new ebtree version 2009-10-26 21:10:04 +01:00
lb_fas.h MEDIUM: backend: add the 'first' balancing algorithm 2012-02-21 22:27:27 +01:00
lb_fwlc.h [MEDIUM] build: switch ebtree users to use new ebtree version 2009-10-26 21:10:04 +01:00
lb_fwrr.h [MEDIUM] build: switch ebtree users to use new ebtree version 2009-10-26 21:10:04 +01:00
lb_map.h [CLEANUP] proxy: move last lb-specific bits to their respective files 2009-10-03 18:41:18 +02:00
listener.h DIET/MINOR: listener: rearrange a few fields in struct listener to save 16 bytes 2013-12-09 16:06:21 +01:00
log.h BUG/MINOR: http: fix encoding of samples used in http headers 2014-03-17 16:39:03 +01:00
map.h MAJOR: pattern/map: Extends the map edition system in the patterns 2014-03-17 18:06:07 +01:00
obj_type.h DIET/MINOR: obj: pack the obj_type enum to 8 bits 2013-12-09 16:06:08 +01:00
pattern.h MINOR: pattern: forbid dns resolutions 2014-03-17 18:06:08 +01:00
peers.h CLEANUP: Remove unused 'last_slowstart_change' field from struct peer 2013-11-19 08:04:59 +01:00
pipe.h [MEDIUM] introduce pipe pools 2009-01-25 13:49:53 +01:00
port_range.h [MEDIUM] add support for binding to source port ranges during connect 2009-06-10 12:23:32 +02:00
proto_http.h MEDIUM: sample/http_proto: Add new type called method 2014-03-17 18:06:07 +01:00
proto_tcp.h MINOR: tcp: add new "close" action for tcp-response 2013-09-11 23:28:51 +02:00
protocol.h MEDIUM: protocol: implement a "drain" function in protocol layers 2013-06-10 20:33:23 +02:00
proxy.h MEDIUM: proxy: support use_backend with dynamic names 2014-03-31 10:18:30 +02:00
queue.h [MAJOR] ported pendconn to mempools v2 2007-05-13 20:19:55 +02:00
sample.h MINOR: configuration: File and line propagation 2014-03-17 18:06:08 +01:00
server.h MINOR: checks: use check->state instead of srv->state & SRV_CHECKED 2013-12-14 16:02:19 +01:00
session.h BUG/MEDIUM: http: continue to emit 503 on keep-alive to different server 2014-02-24 18:26:30 +01:00
signal.h [MEDIUM] signals: add support for registering functions and tasks 2010-08-27 18:00:40 +02:00
ssl_sock.h MEDIUM: ssl: improve crt-list format to support negation 2013-05-07 22:11:54 +02:00
stick_table.h MEDIUM: stick-tables: flush old entries upon soft-stop 2013-09-04 17:54:01 +02:00
stream_interface.h MEDIUM: dumpstats: Display error message during add of values. 2014-03-17 18:06:08 +01:00
task.h DIET/MINOR: task: reduce struct task size by 8 bytes 2013-12-09 16:06:22 +01:00
template.h [CLEANUP] included common/version.h everywhere 2006-06-29 18:54:54 +02:00