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 = 2

Fü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/null

Fü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.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.