Vuoi imparare a sviluppare siti web oppure configurare in autonomia un server virtuale (VPS) per il tuo progetto Internet? Ebbene: il primo passo da compiere è l'installazione del web server, ovvero il programma che si occupa di servire le pagine web ai visitatori. Vediamo allora come installare Apache HTTP Server sul PC o server Linux con Ubuntu o CentOS
Procedura ri-verificata e perfezionata per lavorare al meglio sulle distribuzioni moderne di Ubuntu e CentOS.
nota: In questo articolo ci concentreremo, nello specifico, sull'installazione di Apache HTTP Server su Linux (Ubuntu o CentOS). Per la guida equivalente incentrata su Windows:
» Leggi: La Grande Guida ad Apache, MySQL, PHP
Nel resto dell'articolo ci riferiremo al programma "Apache HTTP Server" chiamandolo (impropriamente) solo "Apache", per brevità e per conformarci al nome usato nel quotidiano.
La procedura è stata testata con Ubuntu 18.10 (64 bit) e CentOS 7.6 (64 bit), ma è analoga per tutte le distribuzioni da esse derivate e, presumibilmente, per le generazioni successive.
Passo 1: Aprire il terminale
Se state lavorando via SSH oppure con una edizione spiccatamente "server" (come Ubuntu Server), siete già davanti alla linea di comando, quindi andate oltre.
Se però state impiegando l'edizione "regolare" di Ubuntu per PC, cliccate sul pulsante con i 3x3 punti in basso a sinistra e cercate terminale
per lanciare rapidamente l'omonima applicazione
» Leggi anche: Come aprire il terminale di Ubuntu
Passo 2: Diventare root
Dovete ora acquisire i privilegi massimi diventando root. Il comando è:
sudo -s
In caso dovesse esservi richiesta la password, digitate quella dell'account corrente.
» Leggi anche: Linux (Ubuntu) e sudo: come disabilitare la richiesta di password quando si eseguono comandi come root
In alternativa, potete utilizzare il vostro utente "normale" ed anteporre sudo
ad ogni comando mostrato di seguito.... ma divenire root immediatamente è molto più comodo.
Passo 3: Disinstallare... Apache?
Prima di iniziare, è opportuno verificare che Apache non sia già stato installato, magari per errore. Il modo più efficace di farlo è tramite il gestore dei pacchetti:
-
Con Ubuntu:
dpkg --list | grep apache2
-
Con CentOS:
rpm -qa | grep httpd
Se il comando non mostra alcuna risposta, possiamo tranquillamente andare oltre perché Apache non è installato.
In caso contrario, è fondamentale disinstallare il pacchetto corrente:
-
Disinstallare Apache da Ubuntu:
apt-get purge --auto-remove apache2* -y
-
Disinstallare Apache da CentOS:
yum remove httpd* -y
Passo 4: Installare Apache
Possiamo ora installare Apache e i pacchetti di gestione dei file zip:
-
Installare Apache su Ubuntu:
apt-get update && apt-get install apache2 zip unzip -y
-
Installare Apache su CentOS:
yum clean expire-cache && yum install httpd zip unzip -y
Su CentOS (non Ubuntu), dobbiamo aprire le porte di Apache sul firewall:
firewall-cmd --zone=public --add-port=80/tcp --permanent && firewall-cmd --zone=public --add-port=443/tcp --permanent && systemctl restart firewalld
» Leggi anche: Aprire le porte sul firewall di Linux CentOS - guida rapida a firewalld
Riavviamo il servizio:
-
Riavviare Apache su Ubuntu:
systemctl restart apache2
-
Riavviare Apache su CentOS:
systemctl restart httpd
In questo momento, il server web mostra una pagina di benvenuto "standard" a tutti i client che si collegano. Se la macchina sulla quale è in esecuzione Apache è dotata di un browser web, possiamo verificarlo aprendo http://localhost, ovvero facendo collegare il sistema... a se stesso
Passo 5: Aprire il file .conf
La configurazione di Apache avviene tramite uno o più file testuali. Apriamo il principale nell'editor:
-
Ubuntu:
nano /etc/apache2/apache2.conf
-
CentOS:
nano /etc/httpd/conf/httpd.conf
In caso riceveste un errore inerente la mancanza del pacchetto nano
:
Passo 6: Modificare ServerName
L'operazione seguente non è strettamente necessaria, ma evita il presentarsi del fastidioso avviso AH00558: apache2: Could not reliably determine the server's fully qualified domain name
nei log e nel terminale. Personalmente, raccomando quindi di svolgerla.
Con Ubuntu (ma non CentOS): scorrendo verso il basso, troveremo la sezione dedicata al parametro ServerRoot
(con il simbolo di commento (#
) davanti: è corretto così). Alla riga subito sotto, aggiungiamo questa direttiva:
ServerName www.example.com:80
Con CentOS, invece, localizziamo la direttiva #ServerName www.example.com:80
e rimuoviamo il simbolo di commento (#
) dall'inizio della riga
Passo 7: Eliminare l'accesso al sito di default
Scendiamo verso la fine del documento ed eliminiamo senza pietà i blocchi di configurazione che gestiscono la pagina di benvenuto vista al Passo 4
.
Sotto Ubuntu (ma non CentOS), si tratta di:
<Directory /usr/share>
...
</Directory>
e
<Directory /var/www>
...
</Directory>
Con CentOS, dobbiamo eliminare completamente tutte le istruzioni e i commenti compresi fra queste frasi (estremi compresi):
# DocumentRoot: The directory out of which...
...
</Directory>
Breve spiegazione: Apache consente di configurare un singolo sito direttamente all'interno del file httpd.conf
. Il problema è che questa modalità limita ad un solo, unico sito per server e, per di più, tutta la configurazione viene ignorata non appena si aggiungo siti aggiuntivi sottoforma di "Virtual Host" (come faremo di seguito). Di conseguenza, è meglio eliminare subito tutto questo blocco e prevenire un mare di confusione.
Salvate e chiudete il documento (combinazione da tastiera: Ctrl+X
, Y
, Invio
).
Passo 8: Disabilitare il sito di default
Tornati al prompt dei comandi, disattiviamo la configurazione che gestisce il sito di default impartendo:
-
Ubuntu:
a2dissite 000-default.conf
-
CentOS:
sed -i 's/^/#/' /etc/httpd/conf.d/welcome.conf
Passo 9: Creare la cartella Web
Dobbiamo ora preparare una cartella adibita a contenere tutti i siti web che andremo ad erogare. A me piace usare /home/web/
, ma qualsiasi percorso va benissimo. Procediamo dunque alla creazione della directory:
mkdir /home/web
All'interno di web
, creare una cartella con il nome del nostro primo sito: per questa configurazione iniziale, useremo default
poiché conterrà il sito che sarà mostrato ai visitatori tutte le volte che richiederanno un dominio non configurato in altro modo (questo comportamento diverrà chiaro in seguito). Creiamola con
mkdir /home/web/default
Passo 10: Scaricare il file index
Scaricate ora uno zip con alcuni file di esempio ed estraete tutto quanto nella cartella default
creata al Passo procedente:
curl -o /home/web/default/file_esempio.zip https://turbolab.it/scarica/145 && unzip -o /home/web/default/file_esempio.zip -d /home/web/default/ && rm -f /home/web/default/file_esempio.zip
Per maggiori informazioni su questi comandi:
» Leggi: Come scaricare file da linea di comando: guida a curl e wget per Linux Ubuntu/CentOS
Passo 11: Scaricare i file di configurazione
Allo stesso modo, scarichiamo il pacchetto con i file di configurazione semi-pronti:
-
Ubuntu:
curl -o /etc/apache2/sites-available/conf_esempio.zip https://turbolab.it/scarica/175 && unzip -o /etc/apache2/sites-available/conf_esempio.zip -d /etc/apache2/sites-available/ && rm /etc/apache2/sites-available/conf_esempio.zip
-
CentOS:
curl -o /etc/httpd/conf/conf_esempio.zip https://turbolab.it/scarica/175 && unzip -o /etc/httpd/conf/conf_esempio.zip -d /etc/httpd/conf/ && rm -f /etc/httpd/conf/conf_esempio.zip
Il comando indicato scarica lo zip da TurboLab.it e lo scompatta nelle cartelle di configurazione di Apache, ovvero:
-
Ubuntu:
/etc/apache2/sites-available/
-
CentOS:
/etc/httpd/conf/
Otterremo così i seguenti nuovi file all'interno di detti percorsi:
-
default.conf
: contiene la configurazione da utilizzare di default, ovvero quella che risponde quando viene richiesto un dominio non esplicitamente configurato -
vhosts_template.conf
: contiene un modello pronto all'uso, da copiare per creare rapidamente la configurazione degli altri siti che erogheremo da questo host (v. seguito)
Passo 12: Modificare il Virtual Host di default
Aprite ora il file di configurazione appena ottenuto:
-
Ubuntu:
nano /etc/apache2/sites-available/default.conf
-
CentOS:
nano /etc/httpd/conf/default.conf
Al suo interno, dobbiamo valorizzare opportunamente DocumentRoot
: è il parametro che indica dove si trovano i file HTML, PHP, CSS, immagine ecc. che compongono il sito web.
Di default è impostato a "/home/web/default"
, ovvero la cartella creata al Passo 9
. Fate attenzione a conservare le virgolette, e modificate come da vostra situazione corrente.
Subito sotto, copia-incollate lo stesso identico percorso come attributo del tag <Directory>
, sempre conservando le virgolette
Salvate le modifiche e chiudete: anche qui abbiamo finito.
Passo 13: Attivare la configurazione
Dobbiamo ora attivare il sito di default che abbiamo appena preparato:
-
Ubuntu:
a2ensite default.conf
-
CentOS:
ln -s /etc/httpd/conf/default.conf /etc/httpd/conf.d/default.conf
Passo 14: Riavviare il servizio
Ora che la configurazione è pronta, dobbiamo riavviare Apache per renderla effettiva:
-
Ubuntu:
systemctl restart apache2
-
CentOS:
systemctl restart httpd
Se non viene mostrato alcun messaggio, significa che l'operazione è andata a buon fine ed Apache è in esecuzione, pronto ad erogare pagine web. In caso contrario, il riferimento da consultare è:
Passo 15: Visualizzare la pagina con il browser web
Tutto è pronto: apriamo il browser web e digitiamo l'URL http://localhost per visitare il sito in esecuzione sul PC locale (se si tratta di un server senza interfaccia grafica, usiamo curl http://localhost
per visualizzare l'HTML a Terminale).
Se tutto funziona correttamente, vedrete la pagina di test
Provate ora ad aprire con l'editor il file index.html
presente nella sottocartella /home/web/default
(vedi Passo 9
e Passo 10
). Fate qualche modifica, salvate, ricaricate la pagina nel browser e vedrete le modifiche apportate.
Tanto per capire meglio come funziona l'installazione attuale, svolgete questo semplice esercizio:
- copiare il file
index.html
- rinominate la copia in
pagina1.html
- usando l'editor di testi, modificate
pagina1.html
e scrivete qualcosa a piacere (anche soloCiao a tutti!
va benissimo) - da browser web, aprite l'indirizzo http://localhost/pagina1.html
- la nuova pagina verrà mostrata all'interno del browser
La situazione è dunque la seguente (la schermata è stata catturata da Windows, ma è analoga sotto Linux)
In definitiva: accodando il nome del file desiderato all'indirizzo http://localhost/
, il browser richiede detto file al server web. Se il file esiste nella cartella che abbiamo specificato come DocumentRoot
, Apache lo fornisce al browser, che lo interpreta e lo mostra.
Passo 16: Modificare il file hosts
La configurazione attuale funziona poiché abbiamo impostato il sito "di default" servito da Apache. Questo significa che la nostra installazione di Apache serve il contenuto della cartella impostata come DocumentRoot
(vedi precedente Passo 12
) ad ogni browser che richieda una qualsiasi pagina di un qualsiasi dominio.
Ecco quindi spiegato perché possiamo visualizzare il nostro sito anche collegandoci ad http://127.0.0.1 (l'indirizzo IP che identifica il computer locale) oppure utilizzando l'indirizzo IP di LAN o, se si tratta di un server remoto, specificando il suo indirizzo IP pubblico all'interno del browser sul computer locale
» Leggi anche: Visualizzare l’indirizzo IP del computer con Ubuntu
» Leggi anche: Come visualizzare l'indirizzo IP con Linux CentOS
Per capire meglio il funzionamento di questo meccanismo, modifichiamo il file hosts:
nano /etc/hosts
Aggiungiamo le seguenti righe:
127.0.0.1 miosito.com www.miosito.com
» Leggi anche: La Grande Guida al file hosts
D'ora in avanti, qualsiasi tentativo di accedere ai domini miosito.com
oppure www.miosito.com
verrà risolto sul PC stesso. Di conseguenza, aprendo via browser o con il comando Curl gli URL http://miosito.com oppure http://www.miosito.com, vedremo la nostra solita pagina di test.
Passo 17: Erogare molteplici siti
Come appena dimostrato, la configurazione corrente mostra sempre lo stesso sito, indipendentemente dal dominio richiesto. Ma possiamo fare in modo che Apache utilizzi una cartella DocumentRoot
diversa a seconda del dominio richiesto e, di conseguenza, mostri siti completamente diversi: ad esempio, potremmo erogare i siti sito1.com
e sito2.com
dallo stesso PC.
Iniziamo aggiungendo queste righe al file hosts:
127.0.0.1 sito1.com www.sito1.com
127.0.0.1 sito2.com www.sito2.com
127.0.0.1 sito3.com www.sito3.com
In questa situazione, ogni connessione via browser a detti domini mostra sempre la stessa pagina di test, leggendo i file dal percorso simile a /home/web/default
(vedi Passo 9
).
Creiamo ora le cartelle adibite ad erogare i due nuovi siti. Seguendo l'impostazione precedente (Passo 9
), useremo qualcosa di simile a:
mkdir /home/web/sito1
mkdir /home/web/sito2
Scompattiamo all'interno di entrambe le cartelle il pacchetto con i file di esempio già usato in precedenza:
curl -o /home/web/file_esempio.zip https://turbolab.it/scarica/145 && unzip -o /home/web/file_esempio.zip -d /home/web/sito1/ && unzip -o /home/web/file_esempio.zip -d /home/web/sito2/ && rm -f /home/web/file_esempio.zip
Ora entriamo e modifichiamo le rispettive copie di index.html
per mostrare un messaggio che ci permetta poi di distinguere i due siti. Ad esempio:
-
nano /home/web/sito1/index.html
: scriviamoBenvenuto su sito1.com
-
nano /home/web/sito2/index.html
: scriviamoStai guardando sito2.com
Procediamo ora a duplicare il template vhosts_template.conf
(ottenuto al Passo 11
) creando un file di configurazione per sito1.com (in seguito, ripetere per sito2.com con le appropriate differenze):
-
Ubuntu:
cp /etc/apache2/sites-available/vhosts_template.conf /etc/apache2/sites-available/sito1.conf
-
CentOS:
cp /etc/httpd/conf/vhosts_template.conf /etc/httpd/conf/sito1.conf
Apriamo in nuovo file:
-
Ubuntu:
nano /etc/apache2/sites-available/sito1.conf
-
CentOS:
nano /etc/httpd/conf/sito1.conf
Ora:
- valorizziamo
ServerName
di modo che corrisponda al dominio che vogliamo gestire (in questo caso:sito1.com
) - valorizziamo
ServerAlias
di modo che risponda anche all'hostnamewww
del nostro dominio (in questo caso:www.sito1.com
) - modifichiamo i percorsi di
DocumentRoot
e<Directory>
come già fatto al precedentePasso 12
per fare in modo che punti alla directory che contiene il nostro sito (in questo caso:/home/web/sito1
) - salvare le modifiche al file e chiudere
Dobbiamo ora attivare la nuova configurazione:
-
Ubuntu:
a2ensite sito1.conf
-
CentOS:
ln -s /etc/httpd/conf/sito1.conf /etc/httpd/conf.d/sito1.conf
Ripetere i passi appena elencati per gestire sito2.com, quindi riavviate il servizio:
-
Ubuntu:
systemctl restart apache2
-
CentOS:
systemctl restart httpd
In caso venisse visualizzato il messaggio d'errore The requested operation has failed!
, consultare il seguente articolo:
Se tutto è filato liscio, tornate al browser web e provate ad aprire http://sito1.com oppure http://www.sito1.com: dovreste vedere il messaggio personalizzato che avevamo inserito nel relativo file index.html
. Aprendo http://sito2.com oppure http://www.sito2.com verrà visualizzata l'altra pagina.
Aprendo http://sito3.com (il dominio che avevamo inserito nel file hosts ma non configurato in Apache) continuerà invece ad essere visualizzata la pagina di test del sito di default.
Cosa fare ora?
Arrivati a questo punto, il nostro Apache su Linux è perfettamente configurato e funzionante. Probabilmente, però, vorremo installare anche PHP e MySQL di modo da eseguire un gestore di contenuti (CMS) come WordPress e creare il nostro blog, oppure imparare a programmare. Per il resto della guida: