Web Cluster · 7 min read · Oct 08, 2025
Der perfekte Lastverteilte & Hochverfügbare Web-Cluster mit 2 Servern, die Xen auf Ubuntu 8.04 Hardy Heron ausführen - Seite 2
7. Apache/PHP5/Ruby (web1, web2)
7.1 Softwareinstallation
Jetzt installieren wir Apache:
apt-get install apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert
Als nächstes installieren wir PHP5 und Ruby (beide als Apache-Module):
apt-get install libapache2-mod-php5 libapache2-mod-ruby php5 php5-common php5-curl php5-dev php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
7.2 Apache-Konfiguration
Als nächstes bearbeiten wir /etc/apache2/mods-available/dir.conf:
vi /etc/apache2/mods-available/dir.conf
und ändern die DirectoryIndex-Zeile:
#DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.php3 index.pl index.xhtml
Jetzt müssen wir einige Apache-Module aktivieren (SSL, rewrite, suexec und include):
a2enmod ssl
a2enmod rewrite
a2enmod suexec
a2enmod include
Laden Sie die Apache-Konfiguration neu:
/etc/init.d/apache2 force-reload
Wir werden einige Domains in der vhost-Konfigurationsdatei hinzufügen:
mkdir /var/www/example
mkdir /var/www/yoursite
mkdir /var/www/example/web
mkdir /var/www/example/ssl
mkdir /var/www/yoursite/web
mkdir /var/www/yoursite/ssl
echo “Include /etc/apache2/vhosts.conf” >> /etc/apache2/apache2.conf
vi /etc/apache2/vhosts.conf
Die Konfigurationsdatei sollte so aussehen:
#NameVirtualHost 192.168.1.106:80
#
# ServerName localhost
# ServerAdmin root@localhost
# DocumentRoot /var/www/sharedip
#
#NameVirtualHost 192.168.1.107:80
#
# ServerName localhost
# ServerAdmin root@localhost
# DocumentRoot /var/www/sharedip
#
###EXAMPLE.COM###
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example/web
SetEnvIf Request_URI \.jpg dontlog
SetEnvIf Request_URI \.gif dontlog
SetEnvIf Request_URI \.css dontlog
SetEnvIf Request_URI \.png dontlog
SetEnvIf Request_URI \.txt dontlog
CustomLog /var/log/apache2/example.com-access.log combined env=!dontlog
ErrorLog /var/log/apache2/example.com-error.log
Redirect /webmail http://www.example.com:81/squirrelmail
Redirect /squirrelmail http://www.example.com:81/squirrelmail
ErrorDocument 400 /error/invalidSyntax.html
ErrorDocument 401 /error/authorizationRequired.html
ErrorDocument 403 /error/forbidden.html
ErrorDocument 404 /error/fileNotFound.html
ErrorDocument 405 /error/methodNotAllowed.html
ErrorDocument 500 /error/internalServerError.html
ErrorDocument 503 /error/overloaded.html
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example/web
SetEnvIf Request_URI \.jpg dontlog
SetEnvIf Request_URI \.gif dontlog
SetEnvIf Request_URI \.css dontlog
SetEnvIf Request_URI \.png dontlog
SetEnvIf Request_URI \.txt dontlog
CustomLog /var/log/apache2/example.com-access.log combined env=!dontlog
ErrorLog /var/log/apache2/example.com-error.log
ErrorDocument 400 /error/invalidSyntax.html
ErrorDocument 401 /error/authorizationRequired.html
ErrorDocument 403 /error/forbidden.html
ErrorDocument 404 /error/fileNotFound.html
ErrorDocument 405 /error/methodNotAllowed.html
ErrorDocument 500 /error/internalServerError.html
ErrorDocument 503 /error/overloaded.html
### Kommentieren Sie diesen Teil aus, wenn Sie SSL für diesen virtuellen Host verwenden möchten.
### Vergessen Sie nicht, die Zertifikatsdateien zu erstellen oder zu kopieren, bevor Sie Apache neu starten.
#
#
# ServerName example.com
# ServerAlias www.example.com
# DocumentRoot /var/www/example/web
# SetEnvIf Request_URI \.jpg dontlog
# SetEnvIf Request_URI \.gif dontlog
# SetEnvIf Request_URI \.css dontlog
# SetEnvIf Request_URI \.png dontlog
# SetEnvIf Request_URI \.txt dontlog
# CustomLog /var/log/apache2/example.com-access.log combined env=!dontlog
# ErrorLog /var/log/apache2/example.com-error.log
# SSLEngine on
# SSLCertificateFile /var/www/example/ssl/www.example.com.crt
# SSLCertificateKeyFile /var/www/example/ssl/www.example.com.key
# SSLCertificateChainFile /var/www/example/ssl/www.example.com.key.org
# Redirect /webmail http://www.example.com:81/squirrelmail
# Redirect /squirrelmail http://www.example.com:81/squirrelmail
# ErrorDocument 400 /error/invalidSyntax.html
# ErrorDocument 401 /error/authorizationRequired.html
# ErrorDocument 403 /error/forbidden.html
# ErrorDocument 404 /error/fileNotFound.html
# ErrorDocument 405 /error/methodNotAllowed.html
# ErrorDocument 500 /error/internalServerError.html
# ErrorDocument 503 /error/overloaded.html
#
#
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example/web
SetEnvIf Request_URI \.jpg dontlog
SetEnvIf Request_URI \.gif dontlog
SetEnvIf Request_URI \.css dontlog
SetEnvIf Request_URI \.png dontlog
SetEnvIf Request_URI \.txt dontlog
CustomLog /var/log/apache2/example.com-access.log combined env=!dontlog
ErrorLog /var/log/apache2/example.com-error.log
Redirect /webmail http://www.example.com:81/squirrelmail
Redirect /squirrelmail http://www.example.com:81/squirrelmail
ErrorDocument 400 /error/invalidSyntax.html
ErrorDocument 401 /error/authorizationRequired.html
ErrorDocument 403 /error/forbidden.html
ErrorDocument 404 /error/fileNotFound.html
ErrorDocument 405 /error/methodNotAllowed.html
ErrorDocument 500 /error/internalServerError.html
ErrorDocument 503 /error/overloaded.html
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example/web
SetEnvIf Request_URI \.jpg dontlog
SetEnvIf Request_URI \.gif dontlog
SetEnvIf Request_URI \.css dontlog
SetEnvIf Request_URI \.png dontlog
SetEnvIf Request_URI \.txt dontlog
CustomLog /var/log/apache2/example.com-access.log combined env=!dontlog
ErrorLog /var/log/apache2/example.com-error.log
Redirect /webmail http://www.example.com:81/squirrelmail
Redirect /squirrelmail http://www.example.com:81/squirrelmail
ErrorDocument 400 /error/invalidSyntax.html
ErrorDocument 401 /error/authorizationRequired.html
ErrorDocument 403 /error/forbidden.html
ErrorDocument 404 /error/fileNotFound.html
ErrorDocument 405 /error/methodNotAllowed.html
ErrorDocument 500 /error/internalServerError.html
ErrorDocument 503 /error/overloaded.html
###YOURSITE.COM###
ServerName yoursite.com
ServerAlias www.yoursite.com
DocumentRoot /var/www/yoursite/web
SetEnvIf Request_URI \.jpg dontlog
SetEnvIf Request_URI \.gif dontlog
SetEnvIf Request_URI \.css dontlog
SetEnvIf Request_URI \.png dontlog
SetEnvIf Request_URI \.txt dontlog
CustomLog /var/log/apache2/yoursite.com-access.log combined env=!dontlog
ErrorLog /var/log/apache2/yoursite.com-error.log
Redirect /webmail http://www.yoursite.com:81/squirrelmail
Redirect /squirrelmail http://www.yoursite.com:81/squirrelmail
ErrorDocument 400 /error/invalidSyntax.html
ErrorDocument 401 /error/authorizationRequired.html
ErrorDocument 403 /error/forbidden.html
ErrorDocument 404 /error/fileNotFound.html
ErrorDocument 405 /error/methodNotAllowed.html
ErrorDocument 500 /error/internalServerError.html
ErrorDocument 503 /error/overloaded.html
ServerName yoursite.com
ServerAlias www.yoursite.com
DocumentRoot /var/www/yoursite/web
SetEnvIf Request_URI \.jpg dontlog
SetEnvIf Request_URI \.gif dontlog
SetEnvIf Request_URI \.css dontlog
SetEnvIf Request_URI \.png dontlog
SetEnvIf Request_URI \.txt dontlog
CustomLog /var/log/apache2/yoursite.com-access.log combined env=!dontlog
ErrorLog /var/log/apache2/yoursite.com-error.log
ErrorDocument 400 /error/invalidSyntax.html
ErrorDocument 401 /error/authorizationRequired.html
ErrorDocument 403 /error/forbidden.html
ErrorDocument 404 /error/fileNotFound.html
ErrorDocument 405 /error/methodNotAllowed.html
ErrorDocument 500 /error/internalServerError.html
ErrorDocument 503 /error/overloaded.html
### Kommentieren Sie diesen Teil aus, wenn Sie SSL für diesen virtuellen Host verwenden möchten.
### Vergessen Sie nicht, die Zertifikatsdateien zu erstellen oder zu kopieren, bevor Sie Apache neu starten.
#
#
# ServerName yoursite.com
# ServerAlias www.yoursite.com
# DocumentRoot /var/www/yoursite/web
# SetEnvIf Request_URI \.jpg dontlog
# SetEnvIf Request_URI \.gif dontlog
# SetEnvIf Request_URI \.css dontlog
# SetEnvIf Request_URI \.png dontlog
# SetEnvIf Request_URI \.txt dontlog
# CustomLog /var/log/apache2/yoursite.com-access.log combined env=!dontlog
# ErrorLog /var/log/apache2/yoursite.com-error.log
# SSLEngine on
# SSLCertificateFile /var/www/yoursite/ssl/www.yoursite.com.crt
# SSLCertificateKeyFile /var/www/yoursite/ssl/www.yoursite.com.key
# SSLCertificateChainFile /var/www/yoursite/ssl/www.yoursite.com.key.org
# Redirect /webmail http://www.yoursite.com:81/squirrelmail
# Redirect /squirrelmail http://www.yoursite.com:81/squirrelmail
# ErrorDocument 400 /error/invalidSyntax.html
# ErrorDocument 401 /error/authorizationRequired.html
# ErrorDocument 403 /error/forbidden.html
# ErrorDocument 404 /error/fileNotFound.html
# ErrorDocument 405 /error/methodNotAllowed.html
# ErrorDocument 500 /error/internalServerError.html
# ErrorDocument 503 /error/overloaded.html
#
# Die “SetEnvIf Request_URI … “ und “env=!dontlog” Optionen sind da, um die Protokolle sauberer zu machen, sie protokollieren keinen Zugriff auf Bilder und CSS-Dateien.
Ich benutze ISPConfig shareip-Dateien und Fehlerseiten: HIER
Passen Sie sie an Ihre Bedürfnisse an.
Zuerst installieren Sie wget:
apt-get install wget
cd /var/www
wget http://www.blogama.org/errorpages.tar.gz
tar -zxvf errorpages.tar.gz
rm -rf errorpages.tar.gz
chmod 755 /var/www/error/ -R
cp -av /var/www/error/ /var/www/example/web/
cp -av /var/www/error/ /var/www/yoursite/web/
Wir werden jetzt die Datei /etc/apache2/sites-available/default bearbeiten, damit sie keine ldirectord (den Lastenausgleich) Anfragen protokolliert:
mv /etc/apache2/sites-available/default /etc/apache2/sites-available/default.bak
vi /etc/apache2/sites-available/default
Und fügen Sie dies ein:
NameVirtualHost *
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
Options FollowSymLinks
AllowOverride None
Options FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
ErrorLog /var/log/apache2/error.log
# Mögliche Werte sind: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
#CustomLog /var/log/apache2/access.log combined
SetEnvIf Request_URI "^/ldirectord\.php$" dontlog
SetEnvIf Request_URI "token" dontlog
SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog
SetEnvIf Request_URI \.ico dontlog
CustomLog /var/log/apache2/access.log combined env=!dontlog
ServerSignature On
Alias /doc/ "/usr/share/doc/"
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
Jetzt werden wir einige Ports in Apache öffnen, die später verwendet werden:
vi /etc/apache2/ports.conf
Listen 80
Listen 81
Listen 10001
Listen 20001
Listen 443
Port 10001 und 20001 werden für die Überwachung verwendet. Port 81 ist für Webmail.
Wir müssen Apache neu starten, um die Änderungen anzuwenden, die wir vorgenommen haben:
/etc/init.d/apache2 restart
7.3 Vorbereitung der Apache-Knoten für die Lastverteilung
Schließlich müssen wir unsere Apache-Cluster-Knoten web1.example.com und web2.example.com so konfigurieren, dass sie Anfragen an den virtuellen IP-Adressen 192.168.1.106 und 192.168.1.107 akzeptieren.
apt-get install iproute
Fügen Sie Folgendes zu /etc/sysctl.conf hinzu:
vi /etc/sysctl.conf
# Aktivieren Sie die Konfiguration der arp_ignore-Option
net.ipv4.conf.all.arp_ignore = 1
# Wenn eine arp-Anfrage auf eth0 empfangen wird, antworten Sie nur, wenn diese Adresse
# auf eth0 konfiguriert ist. Insbesondere nicht antworten, wenn die Adresse
# auf lo konfiguriert ist
net.ipv4.conf.eth0.arp_ignore = 1
# Gleiches für eth1, hinzufügen für alle ARPing-Schnittstellen
#net.ipv4.conf.eth1.arp_ignore = 1
# Aktivieren Sie die Konfiguration der arp_announce-Option
net.ipv4.conf.all.arp_announce = 2
# Bei einer ARP-Anfrage, die über eth0 gesendet wird, immer eine Adresse verwenden, die
# auf eth0 als Quelladresse der ARP-Anfrage konfiguriert ist. Wenn dies
# nicht gesetzt ist und Pakete über eth0 für eine Adresse gesendet werden, die auf
# lo ist, und eine arp-Anfrage erforderlich ist, wird die Adresse auf lo verwendet.
# Da die Quell-IP-Adresse von arp-Anfragen in den ARP-Cache auf
# dem Ziel eingegeben wird, hat dies den Effekt, diese Adresse anzukündigen. Dies ist
# in diesem Fall nicht wünschenswert, da Adressen auf lo auf den echten Servern nur
# vom Linux-Direktor angekündigt werden sollten.
net.ipv4.conf.eth0.arp_announce = 2
# Gleiches für eth1, hinzufügen für alle ARPing-Schnittstellen
#net.ipv4.conf.eth1.arp_announce = 2Führen Sie dann dies aus:
sysctl -p
Fügen Sie diesen Abschnitt für die virtuelle IP-Adresse zu /etc/network/interfaces hinzu:
vi /etc/network/interfaces
auto lo:0
iface lo:0 inet static
address 192.168.1.106
netmask 255.255.255.255
pre-up sysctl -p > /dev/null
auto lo:1
iface lo:1 inet static
address 192.168.1.107
netmask 255.255.255.255
pre-up sysctl -p > /dev/nullFühren Sie dann dies aus:
Bitte beachten Sie: Nach dem folgenden Schritt erhalten Sie wahrscheinlich diesen Fehler: SIOCSIFFLAGS: Kann angeforderte Adresse nicht zuweisen
Das ist ein normaler Fehler und Sie können ihn ignorieren.
ifup lo:0
ifup lo:1
Wenn Sie die IP zu einem späteren Zeitpunkt ändern, wird empfohlen, ifup lo:0 dann ifdown lo:0 und dann erneut ifup lo:0 auszuführen.
Schließlich müssen wir die Datei ldirectord.php erstellen. Diese Datei wird von den beiden Lastenausgleichsknoten wiederholt angefordert, damit sie sehen können, ob die beiden Apache-Knoten weiterhin zusammen mit MySQL laufen. Ich gehe davon aus, dass das Document Root der Haupt-Apache-Website auf web1 und web2 /var/www ist, daher erstellen wir die Datei /var/www/ldirectord.php:
vi /var/www/ldirectord.php
und kopieren Sie dies:
Später werden wir MySQL mit lokalem Zugriff für den Benutzer “ldirectord” einrichten, im Moment funktioniert die Datei nicht.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.