Apache HTTP Server (comunemente chiamato Apache o httpd) è il web server più longevo e diffuso al mondo. Sviluppato dalla Apache Software Foundation, è noto per la sua stabilità, flessibilità e vasto ecosistema di moduli. La sua architettura modulare permette di estendere le funzionalità con facilità, rendendolo adatto sia per semplici siti statici che per applicazioni web complesse.
Utilizzando l’immagine Docker httpd:latest, si ottiene un container pronto all’uso basato su Debian. Apache è particolarmente indicato quando si necessita di configurazioni granulari tramite file .htaccess, supporto nativo per PHP con mod_php, o funzionalità avanzate come URL rewriting complesso e autenticazione integrata.
Apache vs NGINX: quale scegliere?
Per poter ospitare dei siti, è possibile utilizzare anche NGINX
. Anche se hanno scopi molto simili, questi possono essere utilizzati in modo differente in base alle proprie esigenze. Le caratteristiche principali sono riassunte nella tabella sotto, ma in sintesi: scegli Apache se hai bisogno di .htaccess così da poter ospitare applicazioni PHP tradizionali o usare un singolo container per ospitare più siti (hosting condiviso). Scegli invece NGINX se devi ospitare siti statici ad alte prestazioni in ambienti con risorse limitate.
| Scenario | Apache | NGINX |
|---|---|---|
| Siti statici semplici | SI | CONSIGLIATO |
| Applicazioni PHP (WordPress, Laravel) | CONSIGLIATO | SI |
| Configurazioni per-directory (.htaccess) | CONSIGLIATO | NO |
| Risorse limitate (RAM/CPU) | SI | CONSIGLIATO |
| Alto traffico / molte connessioni | SI | CONSIGLIATO |
| Reverse proxy / Load balancer | SI | CONSIGLIATO |
| Hosting condiviso | CONSIGLIATO | SI |
| Moduli dinamici a runtime | CONSIGLIATO | NO |
Processo di Installazione
Dopo aver installato Docker Engine e Docker Compose, è possibile procedere con il deploy del web server Apache.
Il file docker-compose.yml qui sotto configura un unico servizio e non richiede variabili d’ambiente. È necessario creare la cartella website/site per i file del sito statico (mappata su /usr/local/apache2/htdocs). Il mount del file httpd.conf è opzionale e serve solo per personalizzare la configurazione di Apache. La porta 8080 dell’host viene esposta per accedere al sito tramite browser.
website:
image: httpd:latest
container_name: apache_webserver
ports:
- "8080:80"
volumes:
- ./website/site:/usr/local/apache2/htdocs
- ./website/httpd.conf:/usr/local/apache2/conf/httpd.conf # Opzionale
restart: unless-stoppedConfigurazione httpd.conf
Di seguito una configurazione base per il file httpd.conf da posizionare in ./website/httpd.conf. Nel caso non ci fossero necessità particolari, è possibile omettere il mount di questo volume dal docker-compose. Questa configurazione è adatta per servire contenuti statici:
# Server principale
ServerRoot "/usr/local/apache2"
Listen 80
# Moduli essenziali
LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule dir_module modules/mod_dir.so
LoadModule mime_module modules/mod_mime.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule unixd_module modules/mod_unixd.so
# Utente e gruppo
User www-data
Group www-data
# Nome del server (evita warning all'avvio)
ServerName localhost
# Document root
DocumentRoot "/usr/local/apache2/htdocs"
<Directory "/usr/local/apache2/htdocs">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
# File index predefiniti
DirectoryIndex index.html index.htm
# Tipi MIME
TypesConfig conf/mime.types
# Logging (output su stdout/stderr per Docker)
ErrorLog /proc/self/fd/2
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog /proc/self/fd/1 commonAvvio del Container
Per avviare il container, spostarsi nella directory contenente il file docker-compose.yml ed eseguire il seguente comando:
docker-compose up -dQuesto comando avvia il servizio in modalità detached, consentendo di funzionare in background. Una volta avviato, il sito sarà accessibile all’indirizzo http://<indirizzo_IP_server>:8080.
Troubleshooting
Qui di seguito sono elencati i possibili problemi che si possono riscontrare nell’installazione o nell’utilizzo del container:
- Pagina bianca o errore 403 Forbidden: Verificare che la cartella
website/sitecontenga almeno un fileindex.htmle che i permessi siano corretti (leggibili dall’utentewww-data). - Il container non si avvia: La causa più comune è un conflitto di porte (8080 già in uso) o un errore nel file
httpd.conf. Verificare i log condocker logs apache_webserver. - Le modifiche ai file non sono visibili: Svuotare la cache del browser o provare in modalità incognito.
- Errori di sintassi in httpd.conf: Verificare la configurazione con
docker exec apache_webserver apachectl configtest.