-
Notifications
You must be signed in to change notification settings - Fork 2
/
url-switching.cfg
120 lines (105 loc) · 3.98 KB
/
url-switching.cfg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#
# This configuration can be used as an example of how URL-switching may be
# implemented with current haproxy versions.
#
# Right now (version 1.2), haproxy can only select a server based on the cookie
# provided by the client. While this may sound limitated, it is yet possible to
# combine this feature to rewrites to provide full URL-switching capabilities.
#
# For this, we have to chain 3 levels :
# - front-end : will match the expected URIs and assign a cookie accordingly ;
# it uses regexps and could match on anything else (Host:,
# cookies, ...)
# - switch : will select a back-end depending on the cookie above
# - back-ends : will perform the load balancing between multiple servers for
# the same group. Note that this level can be omitted if there
# is only one server for each backend.
#
# Logging is performed at the lower level (back-ends) so that local server
# problems can be identified quickly with the timers. The client's IP is
# propagated in the X-Forwarded-For: header.
#
global
daemon
maxconn 6000 # warning: this has to be 3 times the expected value!
log 192.168.0.1 local0
defaults
mode http
balance roundrobin
option dontlognull
option httpclose
retries 1
redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
#
# This is the instance the client connects to.
#
listen frontend 10.20.30.40:80
option forwardfor # add 'X-Forwarded-For: IP'
# remove an eventual 'backend' cookie the client might have sent
reqidel ^Cookie:\ backend=
# add cookie 'backend=2' for any HTTP method followed by
# '/img' only or '/img/' followed by anything.
reqirep ^[^:\ ]*\ /img[/\ ].* \0\nCookie:\ backend=2
# add cookie 'backend=3' for any HTTP method followed by
# '/home' only or '/home/' followed by anything.
reqirep ^[^:\ ]*\ /home[/\ ].* \0\nCookie:\ backend=3
# send everything to next stage
server switch 127.0.0.2:8000
#
# This instance is only seen by the 'frontend' instance above. It receives all
# of its traffic.
#
listen switch 127.0.0.2:8000
# cookie name 'backend' inserted by the 'frontend' instance above
cookie backend
# default server 'backend1' gets the default traffic.
server backend1 127.0.0.3:8001
# those servers get traffic only if their cookie is present because
# they are tagged 'backup'.
server backend2 127.0.0.3:8002 cookie 2 backup
server backend3 127.0.0.3:8003 cookie 3 backup
#
# Backend 1 for dynamic contents.
# It is made of 4 apache servers which we can test thanks to a CGI script.
#
listen backend1 127.0.0.3:8001
log global
option httplog
capture request header X-Forwarded-For len 15
option httpchk /cgi-bin/testhost.pl
server apache1 192.168.1.1:80 maxconn 100 check inter 2000 fall 3
server apache2 192.168.1.2:80 maxconn 100 check inter 2000 fall 3
server apache3 192.168.1.3:80 maxconn 100 check inter 2000 fall 3
server apache4 192.168.1.4:80 maxconn 100 check inter 2000 fall 3
#
# backend 2 for images (/img).
# It is made of 3 Tux servers which we test by requesting the /img/logo.png
# file which should be present when file-systems are mounted.
#
listen backend2 127.0.0.3:8002
log global
option httplog
capture request header X-Forwarded-For len 15
option httpchk /img/logo.png
server tux5 192.168.1.5:80 check inter 2000 fall 3
server tux6 192.168.1.6:80 check inter 2000 fall 3
server tux7 192.168.1.7:80 check inter 2000 fall 3
#
# backend 3 for home directories (/home). These are the same machines as for
# dynamic content, except that a different server is bound to another port.
# We test the service by checking that the file "/home/webmaster/started"
# exists.
#
listen backend3 127.0.0.3:8003
log global
option httplog
capture request header X-Forwarded-For len 15
option httpchk /home/webmaster/started
server light1 192.168.1.1:8080 check inter 2000 fall 3
server light2 192.168.1.2:8080 check inter 2000 fall 3
server light3 192.168.1.3:8080 check inter 2000 fall 3
server light4 192.168.1.4:8080 check inter 2000 fall 3