Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Load Balancer HAproxy mit SSL



DerDude
29.04.2018, 19:10
Ich würde gerne einen Load Balancer mit SSL , aber keine SSL Termination, aufsetzten. Bislang sieht meine Config so aus:


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+A ES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES: RSA+3DES:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3

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



frontend firstbalance
bind *:80
option forwardfor
default_backend webservers


backend webservers
balance roundrobin
server Loki xxx.xxx.xxx.xxx
server Ragnarok xxx.xxx.xxx


Das ganze funktioniert auch so, leider ohne SSL. Würde mich über eine kleine Hilfestellung freuen. Auf den Backend Servern läuft jeweils nginx. Wenn mir da jemand helfen kann bin ich gerne bereit ihm/ ihr eine Aufmerksamkeit in Form von 2-3 Bier in XMR zukommen zu lassen.

Mfg

syrius
30.04.2018, 08:05
Frage zwischendurch. Warum HaProxy und nicht gleich alles mit NGINX?

Gruß

Nimbus
30.04.2018, 08:42
Ich habe haproxy ewig nicht genutzt. Bin folglich etwas raus und kann mich nicht wirklich an das Config-Format erinnern. Ganz spontan fällt mir jedoch auf, dass du nur auf Port 80 lauschst.

Nach kurzer Recherche würde ich unter

bind *:80
etwas in folgende Richtung erwarten

bind *:443 ssl crt /etc/ssl/xyz.pem

DerDude
30.04.2018, 15:55
Frage zwischendurch. Warum HaProxy und nicht gleich alles mit NGINX?

Gruß
Magst du mir die geeignete Nginx Config zukommen lassen, bei der sich SSL nutzen lässt? Danke

Mfg

syrius
01.05.2018, 10:47
Vorsorglich gleich vorab, bin kein NGINX "Profi".

In folgendem ist keine Hochverfügbarkeit / Lastenverteilung inbegriffen aber da ich das die Tage eh brauche, schau ich mal was sich dazu finden lässt. Ansonsten wäre das folgende ein simpler Reverse-Proxy samt SSL. Die 10.8.0.2 ist ein VPN-Client / Backend-Webserver.


server {
listen 80;
server_name _;
return 301 https://www.tld.to;
}

server {
listen 443 ssl;
server_name _;

ssl_certificate_key /etc/letsencrypt/live/www.tld.to/privkey.pem;
ssl_certificate /etc/letsencrypt/live/www.tld.to/fullchain.pem;

location / {
proxy_pass http://10.8.0.2;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
}
}

Wie @Nimbus erwähnt hat, fehlt in deiner Konfiguration der Part, an welchem Port SSL lauschen soll, sowie die deklaration des Zertifikats.

# edit

Das folgende sollte als Lastenverteilung funktionieren. (Quelle: Lastverteilung und Caching mit Nginx - SysEleven ? Hosting. Skaliert. (http://www.syseleven.de/blog/lastverteilung-und-caching-mit-nginx/))


upstream ha {
server 10.8.0.2 weight=5;
server 10.8.0.3 weight=5;
}

server {
listen 80;
server_name _;
return 301 https://www.tld.to;
}

server {
listen 443 ssl;
server_name _;

ssl_certificate_key /etc/letsencrypt/live/www.tld.to/privkey.pem;
ssl_certificate /etc/letsencrypt/live/www.tld.to/fullchain.pem;

location / {
proxy_pass http://ha;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
}
}