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

Guida server web: come installare Apache Linux (Ubuntu/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 17.04 (64 bit) e CentOS 7.3 (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 un'edizione spiccatamente "server" (come Ubuntu Server), siete già davanti alla linea di comando, quindi andate oltre.

Se però state impiegando l'edizione "regolare" per PC, cliccate sul pulsante con i 3x3 punti in basso a sinistra e cercate terminale per lanciare rapidamente l'omonima applicazione

Guida server web: come installare Apache Linux (Ubuntu/CentOS) - linux apri terminale

» 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

Guida server web: come installare Apache Linux (Ubuntu/CentOS) - apache2 ubuntu default page

Guida server web: come installare Apache Linux (Ubuntu/CentOS)

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:

» Leggi: Guida: modificare i file di configurazione di Linux Ubuntu/CentOS da terminale è facile con "nano" (alternativa a "vi")

Guida server web: come installare Apache Linux (Ubuntu/CentOS)

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

Guida server web: come installare Apache Linux (Ubuntu/CentOS) - apache servername

Con CentOS, invece, localizziamo la direttiva #ServerName www.example.com:80 e rimuoviamo il simbolo di commento (#) dall'inizio della riga

Guida server web: come installare Apache Linux (Ubuntu/CentOS)

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>

Guida server web: come installare Apache Linux (Ubuntu/CentOS)

Con CentOS, dobbiamo eliminare completamente tutte le istruzioni e i commenti compresi fra queste frasi (estremi compresi):

# DocumentRoot: The directory out of which...

...

</Directory>

Guida server web: come installare Apache Linux (Ubuntu/CentOS)

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

Guida server web: come installare Apache Linux (Ubuntu/CentOS) - linux webroot web

Per maggiori informazioni su questi comandi:

» Leggi: Come scaricare file da linea di comando: guida a curl e wget per Linux Ubuntu/CentOS

» Leggi: Guida zip unzip con Linux: come zippare (comprimere, creare) e unzippare (estrarre) archivi .zip da linea di comando con Ubuntu e CentOS - errore bash: unzip: command not found

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)

Guida server web: come installare Apache Linux (Ubuntu/CentOS) - Schermata del 2017-09-02 23-57-08

Guida server web: come installare Apache Linux (Ubuntu/CentOS)

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

Guida server web: come installare Apache Linux (Ubuntu/CentOS) - apache linux default vhost

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 è:

» Leggi: Apache su Windows: risolvere gli errori The requested operation has failed!, AH00526: Syntax error on line, AH00072: make_sock: could not bind to address 0.0.0.0:80

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

Guida server web: come installare Apache Linux (Ubuntu/CentOS)

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:

  1. copiare il file index.html
  2. rinominate la copia in pagina1.html
  3. usando l'editor di testi, modificate pagina1.html e scrivete qualcosa a piacere (anche solo Ciao a tutti! va benissimo)
  4. da browser web, aprite l'indirizzo http://localhost/pagina1.html
  5. la nuova pagina verrà mostrata all'interno del browser

La situazione è dunque la seguente (la schermata è stata catturata da Windows, ma è analoga sotto Linux)

Guida server web: come installare Apache Linux (Ubuntu/CentOS)

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

Aggiuamo 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: scriviamo Benvenuto su sito1.com
  • nano /home/web/sito2/index.html: scriviamo Stai 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:

  1. valorizziamo ServerName di modo che corrisponda al dominio che vogliamo gestire (in questo caso: sito1.com)
  2. valorizziamo ServerAlias di modo che risponda anche all'hostname www del nostro dominio (in questo caso: www.sito1.com)
  3. modifichiamo i percorsi di DocumentRoot e <Directory> come già fatto al precedente Passo 12 per fare in modo che punti alla directory che contiene il nostro sito (in questo caso: /home/web/sito1)
  4. 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:

» Leggi: Apache su Windows: risolvere gli errori The requested operation has failed!, AH00526: Syntax error on line, AH00072: make_sock: could not bind to address 0.0.0.0:80

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.

Guida server web: come installare Apache Linux (Ubuntu/CentOS) - vhost sito1 sito2 sito3

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:

» Leggi: Installare e configurare un server web: La Grande Guida ad Apache, MySQL, PHP su Windows e Linux in modo facile