Il modo migliore di far girare Apache su Linux è probabilmente quello di installare Apache come servizio. Vediamo come fare, considerando come esempio per i comandi e i percorsi la procedura di installazione su Ubuntu (facilmente replicabile in locale). Per installare Apache

sudo apt-get install apache2

a questo punto Apache può essere avviato o arrestato come servizio

sudo service apache2 start

sudo service apache2 stop

I primi files che potrebbero interessarci sono

Log: /var/log/apache2/error.log (in caso di errore)

Config: /etc/apache2/apache2.conf

Config: /etc/apache2/httpd.conf (vuoto)

Gli utenti abituati a maneggiare il file httpd.conf si potrebbero domandare perché tale file è vuoto. La risposta è che i files httpd.conf e ports.conf sono usati automaticamente quando viene letto il file apache2.conf (per mezzo della direttiva include). E' corretto maneggiare il file httpd.conf anziché il file apache2.conf, perché il primo dovrebbe contenere la configurazione specifica dell'utente, mentre il secondo riguarda la configurazione generica del server. Per questo motivo è possibile specificare la configurazione sia nel file apache2.conf che nel file httpd.conf (oppure ports.conf), ma suggeriamo di rispettare la convenzione e inserire le nostre configurazioni “personali” nel file httpd.conf, senza toccare l'altro.

In caso di dubbi sulla correttezza di una configurazione è possibile eseguire il comando:

apache2ctl configtest

Un esempio di configurazione minima del file httpd.conf potrebbe essere:

ServerName my_web_server
DocumentRoot /home/my_user_name/www
ServerRoot /etc/apache2
Listen 84
User my_user_name
Group my_group_name

<Directory /var/www/sitoweb>
order deny,allow
deny from all
allow from 192.168.1
</Directory>

A questo punto potrebbe presentarsi un problema. Andando a specificare una configurazione nel file httpd.conf, potremmo trovarci costretti ad usare una porta diversa dalla 80, come nell'esempio qui sopra, dove abbiamo usato la porta 84. Questo succede nel caso che Apache venga fornito con una configurazione predefinita di un singolo host virtuale, come avviene nel caso di Ubuntu (vedi qui).

L'host virtuale di default è quello raggiungibile quando digitiamo http://localhost nel browser, ed è configurato qui

/etc/apache2/sites-available/default

all'interno di questo file troviamo la configurazione del virtual host di default, tra cui

<VirtualHost *:80>

DocumentRoot /var/www

Ecco cosa succede: se tentiamo di configurare il nostro file http.conf usando la porta 80, generiamo un conflitto che verrà segnalato da un errore del tipo:

(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80

Abbiamo a disposizione almeno tre soluzioni:

  1. Indicare una porta diversa dalla 80 nel nostro file httpd.conf, come sopra. Questo vorrà però dire che dovremmo ricordarci di specificare la porta scelta nel browser
  2. Sbirciare il valore della variabile DocumentRoot nel file /etc/apache2/sites-available/default e deployare il nostro sito esattamente in quella directory. Nel nostro caso significherebbe deployare all'interno delle cartella /var/www
  3. Disabilitare il sito di default e rimpiazzarlo con il nostro. Per fare ciò arrestiamo Apache ed eseguiamo i comandi

cd /etc/apache2/sites-available/

sudo cp default my_new_site

Editiamo poi il file my_new_site e sostituiamo tutti i riferimenti a /var/www con il percorso della nostra directory, ad esempio /home/my_user_name/my_htdocs. A questo punto disabilitiamo il vecchio sito usando a2dissite (apache2disable site) e abilitiamo il nuovo con a2ensite (apache2enaable site).

sudo a2dissite default
sudo a2ensite my_new_site

Fatto questo possiamo far ripartire Apache e dovremmo trovare il nostro sito (o quello che abbiamo messo dentro my_htdocs) quando digitiamo http://localhost nel browser.

Conclusioni

Gli utenti che sono abituati ad usare il file httpd.conf potrebbero trovare più conveniente cambiare modalità di lavoro e utilizzare la terza opzione, cioè disabilitare il sito di default e abilitarne uno nuovo. Ciò permette di trasportare tutta l'esperienza del “vecchio” httpd.conf all'interno del nuovo (file che sopra abbiamo chiamato my_new_site). Infatti, a parte il nome, la sintassi di questo file è la stessa del “vecchio” httpd.conf, per cui nulla va perduto … ma tutto si trasforma!