global maxconn 4096 user haproxy group haproxy tune.ssl.default-dh-param 2048 ssl-default-bind-ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA defaults mode http option forwardfor option httpclose option httplog option dontlognull retries 3 timeout connect 5000 timeout client 50000 timeout server 50000 frontend https-in mode http bind *:443 ssl no-sslv3 crt-list /etc/haproxy/crt-list crt /etc/haproxy/approved-certs/default.pem # HSTS (15768000 seconds = 6 months) rspadd Strict-Transport-Security:\ max-age=15768000 reqadd X-Forwarded-Proto:\ https {{range $app := lsdir "/services"}} {{$hostnames := printf "/services/%s/*" $app}} {{range gets $hostnames}} {{$hostname := .Key}} {{$data := json .Value}} # {{base $hostname}}: acl https_{{base $hostname}} hdr(host) -i {{base $hostname}} acl https_{{base $hostname}} hdr(host) -i www.{{base $hostname}} use_backend {{base $hostname}} if https_{{base $hostname}} {{end}} {{end}} frontend http-in bind *:80 redirect scheme https code 301 {{range $app := lsdir "/services"}} {{$hostnames := printf "/services/%s/*" $app}} {{range gets $hostnames}} {{$hostname := .Key}} {{$data := json .Value}} # {{base $hostname}}: backend {{base $hostname}} cookie SERVERID insert nocache indirect server Server {{$data.ip}}:{{$data.port}} cookie Server {{end}} {{end}}