Heute stand ich mal wieder vor einem Problem, worüber man nicht all zu viel im Netz findet.
Mod_proxy_balancer als billige Alternative zu einem Layer3 LoadBalancer zu verwenden ist üblich. Dies funktioniert auch wunderbar, so lange man auch alle HTTP-Anfragen auf die Appserver verteilt. Problematisch wird es erst, wenn die Anfragen nicht alle zu dem App-Servern weitergeleitet werden, sondern man statische Seiten auf dem LB (LoadBalancer) lassen will.
Warum sollte man so etwas tun ?
Nunja, es gibt mehrere Gründe
Die Idee ist nun klar, wie macht man das nun? Die erste Anlaufstelle ist die Alias-Directive, die im Apache2-Core enthalten ist.
Das ist auch die korrekte Idee, leider hat mod_proxy etwas dagegen. Sehen wir uns ein Beispiel an:
<VirtualHost *:80>
Servername mydomain.xy
ServerAlias www.mydomain.xy
LogFormat “%h %l %u %t \”%r\” %>s %b” common
CustomLog /var/log/apache2/mydomain.log commonErrorLog /var/log/apache2/mydomain_error.log
LogLevel warn
<Location />
Oder deny, allow
Allow from all
</Location />ProxyPass / balancer://mydomain/ lbmethod=byrequests stickysession=BALANCED
ProxyPassReverse / balancer://mydomain/
<Proxy balancer://mydomin>
BalancerMember http://app1.hostziel.xy route=app1
BalancerMember http://app2.hostziel.xy route=app2
</Proxy>
</VirtualHost *:80>
Das ist eine Standart-Konfiguration für einen LB mit 2 App-Servern. app1.hostziel.xy ist natürlich in /etc/hosts hinterlegt mit der entsprechenden IP.
Bei dieser Konfiguration wird alles auf die beiden App-Server verteilt. Nun wollen wir aber /about Lokal halten und nicht weiter leiten.
Hier kommt nun die Alias-Direktive ins Spiel.
Alias /about/ /var/www/about/
Dies war allerdings nicht alles, denn der mod_proxy ignoriert diese Direktive, also wird immer noch alles weitergeleitet.
Ich habe einige Einstellungen ausprobiert, die alle nicht gefruchtet haben. Ein komplizierterer Weg währe über mod_rewrite, indem man einfach mit einem Regex-Ausdruck alles weiterleitet bis auf /about.
Ich fand dies aber nicht elegant gelöst. Eine einfachere Variante:
ProxyPass /about !
So ignoriert mod_proxy den Pfad /about und die Alias-Direktive greift endlich. Das ist allerdings nur der halbe Weg. Als nächstes muss noch die Directory-Einstellungen vorgenommen werden.
<Directory /var/www/about/*>
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Nun sollten die Dateien in dem Directory zu sehen sein. Aber wer will denn schon das alle Dateien in dem Directory angezeigt werden. Das ist natürlich eine Sicherheitslücke. Hierzu verweigern wir einfach, das Apache den Index der Ordner anzeigt.
<Location /about>
Options -indexes
</Location>
Nun sollte man keinen Index der Dateien mehr sehen, aber auf explizite Dateien im Directory zugreifen können.
www.mydomain.xy/about/about.html
Leave a Reply