#
# This is a sample configuration
# haproxy >= 1.3.5 required.
#
# It listens on 192.168.1.10:80, and directs all requests for Host 'img' or
# URIs starting with /img or /css to a dedicated group of servers. URIs
# starting with /admin/stats are directed to a backend dedicated to statistics.
# TCP splicing is used on static objects to relieve the process from the heavy
# job.
#

global
        maxconn         10000
        log             127.0.0.1 local0
        uid             200
        gid             200
        chroot          /var/empty
        daemon


# The public 'www' address in the DMZ
frontend public
	bind		192.168.1.10:80
        mode            http
	log		global
        option		httplog
        option          dontlognull
        option		httpclose
        option		tcpsplice
	monitor-uri	/monitoruri
        maxconn		8000
	clitimeout	30000

	# Host: will use a specific keyword soon
	reqisetbe	^Host:\ img		static

	# The URI will use a specific keyword soon
	reqisetbe	^[^\ ]*\ /(img|css)/	static
	reqisetbe	^[^\ ]*\ /admin/stats	stats

	default_backend	dynamic


# The static backend backend for 'Host: img', /img and /css.
# TCP splicing is enabled on this backend because we don't expect to do
# anything interesting with static objects, but we know they can eat much
# bandwidth.
backend static
	mode		http
	balance		roundrobin
        option		tcpsplice
        contimeout      5000
        srvtimeout      5000
	redispatch
	retries		2
	option		httpchk HEAD /favicon.ico
        server		statsrv1 192.168.1.8:80 check inter 1000
        server		statsrv2 192.168.1.9:80 check inter 1000


backend dynamic
	mode		http
	balance		roundrobin
	contimeout	30000
	srvtimeout	30000
	redispatch
	retries		2
	option		httpchk HEAD /login.php
	cookie		DYNSRV insert indirect nocache
	fullconn	4000 # the servers will be used at full load above this number of connections
        server		dynsrv1 192.168.1.1:80 minconn 50 maxconn 500 cookie s1 check inter 1000
        server		dynsrv2 192.168.1.2:80 minconn 50 maxconn 500 cookie s2 check inter 1000
        server		dynsrv3 192.168.1.3:80 minconn 50 maxconn 500 cookie s3 check inter 1000
        server		dynsrv4 192.168.1.4:80 minconn 50 maxconn 500 cookie s4 check inter 1000


backend stats
        log             global
        mode            http
        stats           uri /
        balance         roundrobin

