Worpress ist eine wunderbare Blog-Software. Hochfrequentierte Blogs werden gerne hinter einem Balancer gehostet, so dass kein Server zu sehr belastet ist. Das ist kein Problem, bei der Auslieferung von Inhalten, aber beim anlegen?

Wie bekommt man die beiden Server dazu, dass sie synchron bleiben, obwohl unklar ist auf welchen Server neue Daten geschrieben werden, weil sie ja hinter dem Balancer sind ???

Lösungsansatz: Einer schreibt, der andere ist ruhig, will heißen alle(!) Anfragen die das Schreiben betreffen werden auf einen Server geleitet, der andere ist davon nicht betroffen. - Das ist gut, wenn der Balancer URLs parsen kann, dann endet nach dem Einrichten einer zusätzlichen Synchronisation der Artikel.

Kann er aber nicht, dann muss (in unserem Beispiel) der Apache Webserver die URLs zerpflücken. Man wird schnell feststellen, dass Wordpress URLs mit der “falschen” Domäne per Rewrite umbiegt, also der Client (Browser) aufgefordert wird eine andere URL zu verwenden, und da wären wir wieder beim Balancer…

Gut, wir nennen den einen Server W (für write) und den anderen RO (für read-only) die Domaine ist www.mydomain.com und machen dann folgendes auf Server W:

RewriteRule ^/(wp-(content|admin|includes|login).*) /var/www/vhosts/wordpress/$1 [L]
RewriteRule ^/[_0-9a-zA-Z-]+/(wp-(content|admin|includes|login).*) /var/www/vhosts/wordpress/$1 [L]
RewriteRule ^/[_0-9a-zA-Z-]+/(.*\.php)$ /var/www/vhosts/wordpress/$1 [L]

Das ist soweit nicht überraschend, und fügen noch folgenden Virtual Host hinzu:

<VirtualHost ...>
    ServerName bloghelper.mydomain.com
    RewriteEngine On
    RewriteRule ^/(.*)$ http://www.mydomain.com/$1 [P]
</VirtualHost>

Auf dem (den) anderen Server(n) RO führen wir nun folgendes ein:

RewriteCond %{HTTP_REFERER} /wp-admin
RewriteRule ^/(wp-(content|includes).*) http://bloghelper.mydomain.com/$1 [P]
RewriteRule ^/(wp-(admin|login).*) http://bloghelper.mydomain.com/$1 [P]
RewriteRule ^/(wp-(content|includes).*) /var/www/vhosts/wordpress/$1 [L]
RewriteRule ^/([_0-9a-zA-Z-]+/wp-(admin|login).*) http://bloghelper.mydomain.com/$1 [P]

Das sieht beinahe aus wie der Block auf dem Server W, biegt aber eben auf den Server W um. bloghelper.mydomain.de muss natürlich noch in die /etc/hosts aufgenommen werden. Die Bedingung ist da, um die Bilder nicht unnötig langasam zu machen.

Synchronisation noch anschalten. Das wär’s: Happy balancing ;-)