[gull] Gérer la redirection vers https sur un cluster LVS-DR
TISSOT Jacques
jacques.tissot at unifr.ch
Wed Feb 8 16:03:43 CET 2017
Bonjour,
J’ai trouvé l’astuce, en tout cas en partie. La requête http (80) sur l’IPV est redirigée (rewrite) sur https (443) :
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{SERVER_NAME}$1<https://%25%7bSERVER_NAME%7d$1> [R,L]
Les paquets https sont balancés avec IPVS sur les serveurs réels :
ipvsadm –A –t 192.168.56.110 :443 –s rr
ipvsadm –a –t 192.168.56.110 :443 –r 192.168.56.101:443 –g –w 1
ipvsadm –a –t 192.168.56.110 :443 –r 192.168.56.102:443 –g –w 1
Et ldirectord :
virtual =192.168.56.110 :443
fallback=127.0.0.1 :443 gate
real=192.168.56.101 :443 gate
real=192.168.56.102 :443 gate
service=https
checktimeout=30
checktype=external
checkcommand= ‘’/root/check_https’’
scheduler=wlc
protocol=tcp
Je vais essayer avec ce que tu as dit avec Source Hashing, et je vais creuser avec le coup de iptables.
Merci
Jacques
-----------------
Bonjour,
On 08/02/17 11:22, TISSOT Jacques wrote:
Bonjour la communauté,
J’ai mis en place un cluster apache de test, 3 nœuds (un frontend et deux real servers).
Load balancing LVS-DR avec ipvsadm
Monitoring avec ldirectord
Server web: apache
Tout fonctionne bien en http et en https si on les attaque directement. Mais comment gérer une REDIRECTION vers https via cette infrastructure ?
LVS est en couche 4 et apache est en couche 7, donc, si je comprends bien, pas moyen de gérer la redirection par un Redirect ou un Rewrite dans la config d’apache du nœud frontend ?
Alors comment faire ?
Je configurerais la redirection dans (les N instances de) Apache:
<VirtualHost *:80>
ServerName http://www.example.org
ServerAlias example
# Redirect to SSL
RewriteEngine On
RewriteRule ^$ https://www.example.org/ [L,R=301]
RewriteRule ^/(.*)$ https://www.example.org/$1 [L,R=301]
</VirtualHost>
<VirtualHost *:443>
ServerName https://www.example.org
[...]
</VirtualHost>
Tout ce passera de manière transparente au niveau de LVS/ipvsadm (qui effectivement n'a aucun moyen de regard au niveau 7).
Par contre, il faut impérativement travailler en mode "sh" (Source Hashing) ou les sessions SSL/TLS seront invalides d'une connection HTTP(S) à une autre; dans ldirectord.cf:
# WWW (fwm=8080)
virtual=8080
protocol=fwm
scheduler=sh
checkport=80
[...]
L'astuce supplémentaire consiste à utiliser les "firewall marks" afin de gérer de manière identique les connections 80 et 443 (par exemple pour maintenir les sessions PHP en passant de HTTP à HTTPS); dans iptables:
# Mark = 8080
"${IPTABLES}" --table mangle --append PREROUTING --destination <virtual-ip>/32 --protocol tcp --dport 80 --jump MARK --set-mark 8080
"${IPTABLES}" --table mangle --append PREROUTING --destination <virtual-ip>/32 --protocol tcp --dport 443 --jump MARK --set-mark 8080
Bons tests,
Cédric Dufour
J’ai bien sûr fouillé Internet, mais sans grand résultat.
Merci pour vos expertises et vos avis
Jacques Tissot
Unifr.ch
_______________________________________________
gull mailing list
gull at forum.linux-gull.ch<mailto:gull at forum.linux-gull.ch>
http://forum.linux-gull.ch/mailman/listinfo/gull
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://forum.linux-gull.ch/pipermail/gull/attachments/20170208/ddbedcd6/attachment-0001.html>
More information about the gull
mailing list