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 = 2Quindi 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/nullQuindi 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à.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.