---
title: "Installare e configurare Apache su Ubuntu e Windows"
description: "Guida all'installazione del web server Apache: pacchetti su Ubuntu, installazione manuale e servizio su Windows, host virtuali, mod_rewrite e firewall."
url: "https://www.alemasone.com/it/installare-apache-ubuntu-windows/"
language: "it"
published: 2024-03-20
updated: 2026-09-19
categories: ["Programmazione E Sviluppo"]
translations:
  en: "https://www.alemasone.com/en/install-configure-apache-ubuntu-windows/"
  es: "https://www.alemasone.com/es/instalar-configurar-apache-ubuntu-windows/"
  fr: "https://www.alemasone.com/fr/installer-configurer-apache-ubuntu-windows/"
  pt: "https://www.alemasone.com/pt/instalar-configurar-apache-ubuntu-windows/"
  de: "https://www.alemasone.com/de/apache-ubuntu-windows-installieren-konfigurieren/"
---

# Installare e configurare Apache su Ubuntu e Windows

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](https://httpd.apache.org/) è 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:

   ```bash
   sudo apt update
   sudo apt install apache2
   ```

2. Verifica che il servizio sia partito:

   ```bash
   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](pagina-predefinita-apache-ubuntu.png "Se vedi questa pagina, il server è installato e in ascolto")

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

```bash
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:

```bash
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'`:

```bash
sudo ufw allow 'Apache Full'
sudo ufw enable
sudo ufw status
```

> **Occhio a SSH.** Se lavori su un [server remoto via SSH](/it/configurare-ssh-ubuntu/), 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

| Percorso | Contenuto |
|----------|-----------|
| `/var/www/html` | I file del sito predefinito |
| `/etc/apache2/apache2.conf` | Configurazione principale |
| `/etc/apache2/ports.conf` | Le 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.log` | Registro degli accessi |
| `/var/log/apache2/error.log` | Registro 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](https://www.apachelounge.com/)**, elencata nella [pagina di download ufficiale](https://httpd.apache.org/download.cgi). **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](/it/certificato-ssl-windows/), 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:

   ```apache
   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:

   ```bat
   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:

   ```bat
   httpd.exe -k install
   ```

7. Avvia il servizio e verifica su `http://localhost`:

   ```bat
   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:

```bat
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`:

```apache
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:

```apache
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](https://brew.sh/):

```bash
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:

   ```bash
   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:

   ```apache
   <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:

   ```bash
   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`:

```apache
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:

```bash
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:

```apache
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](https://nginx.org/) 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](https://letsencrypt.org/) con lo strumento [Certbot](https://certbot.eff.org/), 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.
