↓Salta al contenuto principale
Alemasone

Installare e configurare Apache su Ubuntu e Windows

Guida all'installazione del web server Apache: pacchetti su Ubuntu, installazione manuale e servizio su Windows, host virtuali, mod_rewrite e firewall.

9 min di lettura Aggiornato il
Terminale con i comandi di installazione di Apache accanto alla pagina di benvenuto del server
In questa pagina
Su Ubuntu Apache si installa con un comando e parte da solo. Su Windows invece lo scarichi, lo scompatti e lo registri come servizio a mano, perché la Apache Software Foundation non distribuisce un programma di installazione. La versione stabile attuale è la 2.4.68, uscita l'8 giugno 2026.

Apache HTTP Server è in giro dal 1995 ed è ancora uno dei web server più usati: riceve le richieste dal browser e restituisce le pagine, da solo o insieme a PHP e a un database. Vediamo l’installazione su tutti e due i sistemi e poi le cose che ti servono subito dopo: firewall, host virtuali e moduli.

Installare Apache su Ubuntu #

I comandi valgono su Ubuntu 26.04 LTS, l’ultima versione con supporto a lungo termine, e allo stesso modo sulle LTS precedenti ancora supportate, la 24.04 e la 22.04. Servono i permessi di amministratore.

  1. Aggiorna l’elenco dei pacchetti e installa il server:

    sudo apt update
    sudo apt install apache2
    
  2. Verifica che il servizio sia partito:

    sudo systemctl status apache2
    

    Se leggi active (running) è tutto a posto. Altrimenti avvialo con sudo systemctl start apache2.

  3. Apri il browser su http://localhost: deve comparire la pagina predefinita «Apache2 Default Page». Se il server è un’altra macchina, ti serve il suo indirizzo IP, che ottieni con hostname -I (di solito è il primo della lista), da scrivere nel browser come http://indirizzo-ip.

    Pagina «Apache2 Ubuntu Default Page» aperta nel browser dopo l’installazione
    Se vedi questa pagina, il server è installato e in ascolto

I comandi che userai più spesso da qui in avanti sono quattro:

sudo systemctl start apache2      # avvia
sudo systemctl stop apache2       # ferma
sudo systemctl restart apache2    # riavvia
sudo systemctl reload apache2     # ricarica la configurazione senza interrompere le connessioni

Dopo una modifica alla configurazione usa reload: le richieste in corso non vengono interrotte.

Apache si avvia da solo a ogni accensione. Se non lo vuoi, lo disattivi con sudo systemctl disable apache2 e lo riattivi con sudo systemctl enable apache2.

Il firewall UFW #

Su Ubuntu il firewall si chiama UFW e va istruito su quali porte lasciare aperte. Apache registra da solo tre profili:

sudo ufw app list

L’elenco mostra Apache (solo porta 80), Apache Secure (solo 443) e Apache Full (entrambe). Io apro direttamente Apache Full, perché prima o poi il certificato HTTPS lo aggiungi; se per ora ti basta l’HTTP, usa 'Apache':

sudo ufw allow 'Apache Full'
sudo ufw enable
sudo ufw status
Occhio a SSH. Se lavori su un server remoto via SSH, autorizza la connessione SSH prima di attivare il firewall, con sudo ufw allow OpenSSH. Attivare UFW senza quella regola chiude la porta da cui sei collegato e ti taglia fuori dal server.

Dove stanno i file #

PercorsoContenuto
/var/www/htmlI file del sito predefinito
/etc/apache2/apache2.confConfigurazione principale
/etc/apache2/ports.confLe porte su cui Apache resta in ascolto (80, e 443 con SSL)
/etc/apache2/sites-available/Host virtuali disponibili
/etc/apache2/sites-enabled/Host virtuali attivi (collegamenti ai precedenti)
/var/log/apache2/access.logRegistro degli accessi
/var/log/apache2/error.logRegistro degli errori: il primo posto da guardare quando qualcosa non va

Installare Apache su Windows #

Per Windows il progetto distribuisce solo il codice sorgente e rimanda a compilazioni fatte da altri. La più usata e aggiornata è quella di Apache Lounge, elencata nella pagina di download ufficiale. Apache Haus, che trovi in molte guide, è ferma dal 2022: lasciala perdere.

Ti serve solo un ambiente di sviluppo? Se vuoi lavorare in locale con PHP e MySQL, un pacchetto completo come Laragon o WampServer ti evita tutti i passaggi che seguono. L’installazione manuale ha senso quando vuoi scegliere tu versione e configurazione, capire come funziona il server o tenerlo acceso stabilmente.
  1. Libera la porta 80. Se hai attivato IIS, il web server di Microsoft incluso nelle edizioni Pro, disattivalo da Attiva o disattiva funzionalità di Windows togliendo la spunta a Internet Information Services. Più sotto trovi come scoprire quale altro programma occupa la porta.

  2. Installa il Visual C++ Redistributable richiesto dalla compilazione che hai scelto: è indicato nella pagina di download ed è la causa più frequente di avvii falliti.

  3. Scarica l’archivio ZIP a 64 bit ed estrai la cartella Apache24 in C:\, così da avere C:\Apache24. È il percorso che la configurazione predefinita si aspetta.

  4. Apri C:\Apache24\conf\httpd.conf con un editor di testo. Se hai scompattato altrove, correggi la variabile SRVROOT in cima al file, che tutte le altre direttive usano come base, sempre con le barre normali:

    Define SRVROOT "c:/Apache24"
    

    Già che ci sei, togli il cancelletto davanti a ServerName e scrivi ServerName localhost:80: eviti l’avviso AH00558 a ogni avvio.

  5. Apri il Prompt dei comandi come amministratore e prova la configurazione:

    cd C:\Apache24\bin
    httpd.exe -t
    

    La risposta attesa è Syntax OK. Se c’è un errore, il messaggio indica file e riga da correggere.

  6. Registra Apache come servizio di Windows, così parte da solo a ogni accensione:

    httpd.exe -k install
    
  7. Avvia il servizio e verifica su http://localhost:

    httpd.exe -k start
    

Per gestirlo in seguito: httpd.exe -k stop lo ferma, httpd.exe -k restart lo riavvia, httpd.exe -k uninstall rimuove il servizio. Lo trovi anche fra i servizi di Windows (services.msc) con il nome Apache2.4: con doppio clic scegli se farlo partire in automatico o a mano. In modalità manuale lo avvii con net start Apache2.4 da un prompt come amministratore.

L’installazione include anche ApacheMonitor.exe, una piccola icona nell’area di notifica da cui avviare e fermare il server senza aprire il prompt.

Se la porta 80 è già occupata

Su Windows la porta 80 è spesso presa da altri programmi: IIS, Skype nelle versioni più vecchie, alcuni servizi di sistema. Per scoprire chi la sta usando, da un prompt con privilegi di amministratore:

netstat -aon | findstr :80

L’ultimo numero della riga è l’identificativo del processo, che si cerca in Gestione attività nella scheda Dettagli. Puoi chiudere quel programma oppure spostare Apache su un’altra porta, modificando in httpd.conf:

Listen 8080

In quel caso il sito risponderà su http://localhost:8080.

Spostare i file del sito #

Di base Apache serve i file di C:\Apache24\htdocs. Se preferisci tenere i siti su un altro disco, per esempio per semplificare i backup, cambia in httpd.conf sia DocumentRoot sia il blocco <Directory> che lo segue:

DocumentRoot "D:/Siti"
<Directory "D:/Siti">

Poi metti un file index.html nella cartella, riavvia il servizio e ricarica http://localhost.

E su macOS? #

macOS ha una versione di Apache preinstallata, ma è indietro con gli aggiornamenti. Fai prima a installarne una con Homebrew:

brew install httpd
brew services start httpd

I file di configurazione finiscono sotto /opt/homebrew/etc/httpd/ sui Mac con Apple Silicon e il server risponde per impostazione predefinita sulla porta 8080.

Host virtuali: più siti sullo stesso server #

Un host virtuale dice ad Apache quale cartella servire in base al nome del sito richiesto. Conviene usarlo anche con un sito solo, perché tieni la configurazione separata da quella predefinita.

Su Ubuntu #

  1. Crea la cartella del sito e assegna i permessi:

    sudo mkdir -p /var/www/esempio.test/public_html
    sudo chown -R $USER:$USER /var/www/esempio.test/public_html
    
  2. Crea il file /etc/apache2/sites-available/esempio.test.conf con questo contenuto:

    <VirtualHost *:80>
        ServerName esempio.test
        ServerAlias www.esempio.test
        DocumentRoot /var/www/esempio.test/public_html
    
        <Directory /var/www/esempio.test/public_html>
            Options -Indexes +FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>
    
        ErrorLog ${APACHE_LOG_DIR}/esempio.test-error.log
        CustomLog ${APACHE_LOG_DIR}/esempio.test-access.log combined
    </VirtualHost>
    
  3. Attiva il sito, disattiva quello predefinito e ricarica:

    sudo a2ensite esempio.test.conf
    sudo a2dissite 000-default.conf
    sudo apache2ctl configtest
    sudo systemctl reload apache2
    
  4. Per provarlo in locale aggiungi la riga 127.0.0.1 esempio.test al file /etc/hosts.

La direttiva AllowOverride All è quella che permette ai file .htaccess di funzionare: senza, le regole di riscrittura nelle sottocartelle vengono ignorate.

Su Windows #

Il meccanismo è lo stesso, ma gli host virtuali stanno in conf/extra/httpd-vhosts.conf, che va prima abilitato togliendo il cancelletto alla riga corrispondente in httpd.conf:

Include conf/extra/httpd-vhosts.conf

Poi si definiscono gli host con la stessa sintassi vista sopra, usando percorsi in stile Windows (c:/siti/esempio/public_html), e si aggiunge la corrispondenza nel file C:\Windows\System32\drivers\etc\hosts, che va aperto con un editor avviato come amministratore.

Attivare mod_rewrite e gli altri moduli #

mod_rewrite riscrive gli indirizzi: lo usano gli URL leggibili di WordPress, l’instradamento dei framework PHP e qualsiasi redirect scritto in un file .htaccess. Di serie è spento.

Su Ubuntu:

sudo a2enmod rewrite
sudo a2enmod headers
sudo a2enmod ssl
sudo systemctl restart apache2

Su Windows si interviene su httpd.conf, togliendo il cancelletto davanti alle righe dei moduli:

LoadModule rewrite_module modules/mod_rewrite.so
LoadModule headers_module modules/mod_headers.so

In tutti e due i casi mod_rewrite funziona solo se c’è anche AllowOverride All nel blocco <Directory> della cartella del sito. Quando le regole non vanno, di solito manca proprio quello.

Per vedere l’elenco dei moduli attivi: apache2ctl -M su Ubuntu, httpd.exe -M su Windows.

Quando qualcosa non funziona #

Apache non parte. Prova la configurazione con apache2ctl configtest oppure httpd.exe -t: l’errore indica file e riga. Su Windows, verifica di aver installato il Visual C++ Redistributable richiesto.

Errore 403 Forbidden. Permessi della cartella o direttiva Require all granted mancante nel blocco <Directory>. Su Ubuntu i file devono essere leggibili dall’utente www-data.

Le regole di riscrittura vengono ignorate. Modulo non attivo oppure AllowOverride impostato su None.

La pagina predefinita compare al posto del sito. L’host virtuale non è stato attivato, oppure il nome nel file hosts non corrisponde a quello scritto in ServerName.

Ogni volta, il primo posto da guardare è il registro degli errori: /var/log/apache2/error.log su Ubuntu, C:\Apache24\logs\error.log su Windows.

Domande frequenti #

Meglio Apache o Nginx? #

Dipende dal carico e da cosa devi servire. Nginx regge meglio tante connessioni contemporanee consumando poco, ed è il più usato sui siti ad alto traffico. Apache è più semplice per chi inizia, accetta la configurazione per cartella con i file .htaccess (Nginx no) ed è quello che trovi su gran parte degli hosting condivisi. Spesso si usano insieme: Nginx davanti, Apache dietro.

Come aggiungo il supporto a PHP? #

Su Ubuntu è un solo comando: sudo apt install php libapache2-mod-php, seguito da un riavvio del servizio. Su Windows PHP va scaricato a parte nella versione «Thread Safe» e collegato ad Apache aggiungendo le righe LoadModule e PHPIniDir in httpd.conf, facendo attenzione a usare una compilazione a 64 bit come quella di Apache.

Devo aprire le porte sul router per essere raggiungibile da internet? #

Sì, per essere visibile dall’esterno devi inoltrare le porte 80 e 443 verso il computer. Pensaci bene prima: un server esposto va tenuto aggiornato e controllato. Se devi solo far vedere un sito a qualcuno, un tunnel temporaneo o un piccolo hosting sono più prudenti.

Come aggiorno Apache su Windows? #

Ferma il servizio con httpd.exe -k stop e fai una copia di httpd.conf, della cartella conf e dei file del sito. Poi estrai la nuova versione sopra quella vecchia, senza sovrascrivere la tua configurazione, controlla con httpd.exe -t e riavvia. Il servizio registrato resta lo stesso, non serve reinstallarlo.

Come attivo l’HTTPS? #

Su un server pubblico la via standard è Let’s Encrypt con lo strumento Certbot, che ottiene il certificato e configura Apache da solo. In locale non serve un’autorità di certificazione: basta un certificato autofirmato. Il browser lo segnala come non attendibile, ma puoi provare il sito in HTTPS lo stesso.

Qual è la differenza tra restart e reload? #

restart ferma e riavvia il processo, e taglia le connessioni in corso. reload fa rileggere la configurazione lasciando finire le richieste già avviate: su un server in uso, dopo una modifica, usa questo.

Da leggere anche