Cíl:
V tomto příkladu jsou požadavky HTTP odesílány proxy přímo jako požadavky HTTP na webové servery HTTP. V případě požadavků HTTPS jsou s certifikáty zpracovány HAproxy a poté jsou odesílány na webové servery jako HTTP požadavky.
Certifikáty SSLC:
Certifikáty pro všechny virtuální hostitele, kteří jsou připojeni přes proxy, jsou uloženy jako jeden soubor formátu PEM na kombinaci certifikát/klíč v adresáři:/etc/ssl/private/
CA jsou také uloženy jako jeden soubor formátu PEM na CA v adresáři:/etc/ssl/certs/
Postup:
Instalace HAproxy:apt-get update && apt-get install haproxy
Nakonfigurujte HAproxy pro vyvažování zátěže HTTP a HTTPS:
Upravte soubor /etc/haproxy/haproxy.cfg
Obsah: global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
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). This list is from:
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3
tune.ssl.default-dh-param 2048
#
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
# Added to create separate error and access logs
option log-separate-errors
#
# ------- HTTP Frontend --------------
frontend http_in
bind *:80
mode http
reqadd X-Forwarded-Proto:\ http
default_backend http_out
#
# ------- HTTPS Frontend --------------
frontend https_glwp-in
bind *:443 ssl crt /etc/ssl/haproxy_certs/
mode http
reqadd X-Forwarded-Proto:\ https
default_backend http_out
#
#------------------------------------
listen stats :2000
mode http
stats enable
stats hide-version
stats realm Haproxy\ Statistics
stats uri /stats
stats auth admin:mypasswd
#
# ------- HTTP Backend --------------
backend http_out
balance roundrobin
stick-table type ip size 200k expire 60m
stick on src
option forwardfor
option httpclose
http-request set-header X-Forwarded-Port %[dst_port]
option httpchk HEAD /
server web1 webserv1.mynet.net:80 check
server web2 webserv2.mynet.net:80 check
server web3 webserv3.mynet.net:80 check
server web4 webserv4.mynet.net:80 check
Zachování zdrojové IP adresy klienta v TCP Proxying
Ve výše uvedených příkladech jsou protokoly, které jsou vyrovnávány zatížením, aplikační protokoly, kde si můžete ponechat zdrojovou IP tím, že ji načtete z HTTP/HTTPS hlavičky X-Forwarded-For: (získáno pomocí možnosti:možnost vpřed pro ), ale pokud používáte HAProxy jako nástroj pro vyrovnávání zatížení vrstvy TCP, za účelem zachování zdrojové IP (IP klienta) viz následující článek:http://blog.haproxy.com/2012/06/05/preserve-source- ip-address-despite-reverse-proxy/
Je to trochu složitý na pochopení a implementaci, zejména na backendovém serveru. Ještě jsem to nezkoušel, takže nemohu zaručit jeho platnost, a proto nemohu uvést žádné příklady. Z toho, co jsem pochopil, jediné změny potřebné v směrnicích TCP proxy (zde nejsou vysvětleny) jsou následující 2 požadavky:
1) Konfigurace HAProxy Backend obsahuje další položku:source 0.0.0.0 usersrc clientip
2) Nastavení sítě backendového serveru musí být nakonfigurováno tak, aby jako výchozí brána měla IP adresu hostitele HaProxy.
Tímto způsobem backend server vidí zdrojovou IP klienta, jako by se klient připojil přímo k backend serveru a odpovědi z backend serveru jsou vráceny přes HAProxy Host.
Pokračování brzy s praktickými příklady …..
Šťastné vyrovnávání zátěže 🙂