Setting up dockerized webmirrors is easy with this
docker run -e web_source="http://www.theregister.co.uk/" -e port=3402 --expose=3402 -P --name=mirror_theregister -d hkubota/webmirror
and you’ll get a descent copy of The Register’s web page on port 3402. Thus access is via http://this.host:3402
Accessing would be nicer via a virtual hostname (e.g. theregister-mirror.this.host). That’s where HAProxy comes into play: as a reverse proxy. I found the basics here.
Here the complete start script:
#!/bin/bash
# Create a valid and usable configport_blog=`docker inspect mirror_haraldblog | jq -r '.[0].NetworkSettings.Ports."3401/tcp"[0].HostPort'`
port_reg=`docker inspect mirror_theregister | jq -r '.[0].NetworkSettings.Ports."3402/tcp"[0].HostPort'`
cat <~/haproxy/config/haproxy/haproxy.cfg
global
user haproxy
group users
# Admin socket
stats socket /var/run/haproxy.sock mode 600 level admin
stats timeout 2m
#daemon
# Default SSL material locations
#ca-base /etc/ssl/certs
#crt-base /etc/ssl/private
# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL).
#ssl-default-bind-ciphers kEECDH+aRSA+AES:kRSA+AES:+AES256:RC4-SHA:!kEDH:!LOW:!EXP:!MD5:!aNULL:!eNULL
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
stats enable
stats uri /stats
stats realm Haproxy\ Statistics
stats auth admin:ADMIN_PASSWORD
frontend http-in
bind *:80
acl is_site1 hdr_end(host) -i www1.studiokubota.com
acl is_site2 hdr_end(host) -i www2.studiokubota.com
use_backend site1 if is_site1
use_backend site2 if is_site2
backend site1
balance first
option httpclose
option forwardfor
server realblog harald.studiokubota.com:80 maxconn 32 check
server mirrorblog studiokubota.com:${port_reg} maxconn 32 check
stats admin if true
backend site2
balance roundrobin
option httpclose
option forwardfor
server s2 studiokubota.com:${port_blog} maxconn 32
listen admin
bind *:1936
stats enable
stats admin if TRUE
_EOF_
docker run -v ~/haproxy/config:/config -p 80:80 -d -p 1936:1936 hkubota/haproxy
Via HAProxy you can access the mirrors via http://www1.studiokubota.com resp. another mirror at http://www2.studiokubota.com, which are much nicer to use.
This setup is probably something for docker-compose if this was one application.
Update 2016-05-03: Enable admin interface: disable/enable backend servers via http://host:1936/haproxy?stats
