Server Configuration · 7 min read · Oct 08, 2025

Il Carico Bilanciato Perfetto e il Cluster Web ad Alta Disponibilità con 2 Server che Eseguono Xen su Ubuntu 8.04 Hardy Heron - Pagina 2

7. Apache/PHP5/Ruby (web1, web2)

7.1 Installazione del software

Ora installiamo Apache:

apt-get install apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert

Successivamente installiamo PHP5 e Ruby (entrambi come moduli Apache):

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 Configurazione di Apache

Successivamente modifichiamo /etc/apache2/mods-available/dir.conf:

vi /etc/apache2/mods-available/dir.conf

e cambiamo la riga DirectoryIndex:



          #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

Ora dobbiamo abilitare alcuni moduli Apache (SSL, rewrite, suexec e include):

a2enmod ssl
a2enmod rewrite
a2enmod suexec
a2enmod include

Ricarichiamo la configurazione di Apache:

/etc/init.d/apache2 force-reload

Aggiungeremo alcuni domini nel file di configurazione vhost :

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

Il file di configurazione dovrebbe apparire così :

#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

### Decommenta questa parte se utilizzerai SSL su questo host virtuale.
### Non dimenticare di creare o copiare i file di certificato prima di riavviare apache.
#
#
#        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

### Decommenta questa parte se utilizzerai SSL su questo host virtuale.
### Non dimenticare di creare o copiare i file di certificato prima di riavviare apache.
#
#
#       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
#
#

Le opzioni “SetEnvIf Request_URI … “ e “env=!dontlog” sono lì per rendere i log più puliti, non registreranno l’accesso a immagini e file css.

Utilizzo i file shareip di ISPConfig e le pagine di errore : QUI

Modificali secondo le tue esigenze.

Prima installa 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/

Ora modificheremo il file /etc/apache2/sites-available/default in modo che non registri le richieste di ldirectord (il bilanciatore di carico) :

mv /etc/apache2/sites-available/default /etc/apache2/sites-available/default.bak
vi /etc/apache2/sites-available/default

E incolla questo :

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
        # I valori possibili includono: 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
    

Ora apriremo alcune porte in apache che saranno utilizzate in seguito :

vi /etc/apache2/ports.conf

Listen 80
Listen 81
Listen 10001
Listen 20001

    Listen 443

La porta 10001 e 20001 saranno utilizzate per il monitoraggio. La porta 81 sarà per il webmail.

Dobbiamo riavviare apache per applicare le modifiche che abbiamo fatto :

/etc/init.d/apache2 restart

7.3 Preparazione dei nodi apache per il bilanciamento del carico

Infine dobbiamo configurare i nostri nodi del cluster Apache web1.example.com e web2.example.com per accettare richieste sugli indirizzi IP virtuali 192.168.1.106 e 192.168.1.107.

apt-get install iproute

Aggiungi il seguente a /etc/sysctl.conf:

vi /etc/sysctl.conf

# Abilita la configurazione dell'opzione arp_ignore
net.ipv4.conf.all.arp_ignore = 1
# Quando viene ricevuta una richiesta arp su eth0, rispondi solo se quell'indirizzo è
# configurato su eth0. In particolare, non rispondere se l'indirizzo è
# configurato su lo
net.ipv4.conf.eth0.arp_ignore = 1
# Ditto per eth1, aggiungi per tutte le interfacce ARPing
#net.ipv4.conf.eth1.arp_ignore = 1

# Abilita la configurazione dell'opzione arp_announce
net.ipv4.conf.all.arp_announce = 2
# Quando si effettua una richiesta ARP inviata tramite eth0 Usa sempre un indirizzo che
# è configurato su eth0 come indirizzo sorgente della richiesta ARP. Se questo
# non è impostato, e i pacchetti vengono inviati su eth0 per un indirizzo che è su
# lo, e viene richiesta una richiesta arp, allora l'indirizzo su lo sarà utilizzato.
# Poiché l'indirizzo IP sorgente delle richieste arp viene inserito nella cache ARP su
# la destinazione, ha l'effetto di annunciare questo indirizzo. Questo è
# indesiderabile in questo caso poiché gli indirizzi su lo sui server reali dovrebbero
# essere annunciati solo dal linux-director.
net.ipv4.conf.eth0.arp_announce = 2
# Ditto per eth1, aggiungi per tutte le interfacce ARPing
#net.ipv4.conf.eth1.arp_announce = 2

Quindi esegui questo:

sysctl -p

Aggiungi questa sezione per l’indirizzo IP virtuale a /etc/network/interfaces:

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

Quindi esegui questo:

Si prega di notare: dopo il seguente passaggio probabilmente riceverai questo errore: SIOCSIFFLAGS: Impossibile assegnare l’indirizzo richiesto

Questo è un bug normale e puoi ignorarlo.

ifup lo:0
ifup lo:1

Se cambi l’IP in un secondo momento, è consigliabile eseguire ifup lo:0 quindi ifdown lo:0 e poi di nuovo ifup lo:0

Infine dobbiamo creare il file ldirectord.php. Questo file è richiesto dai due nodi del bilanciatore di carico ripetutamente in modo che possano vedere se i due nodi Apache sono ancora in esecuzione insieme a MySQL. Presumo che la radice del documento del sito web principale su web1 e web2 sia /var/www, quindi creiamo il file /var/www/ldirectord.php:

vi /var/www/ldirectord.php

e copia questo :

Più tardi configureremo MySQL con accesso locale all’utente “ldirectord”, in questo momento il file non funzionerà.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.