Configurazione Principale
Configurazione della Versione Debian/Ubuntu
La directory di configurazione è /etc/apache2
.
La struttura di configurazione è:
/etc/apache2/
├── apache2.conf
├── conf-available
│ └── *.conf
├── conf-enabled
│ └── serve-cgi-bin.conf -> ../conf-available/*.conf
├── envvars
├── magic
├── mods-available
│ └── *.load
├── mods-enabled
│ ├── *.conf -> ../mods-available/*.conf
│ └── *.load -> ../mods-available/*.load
├── ports.conf
├── sites-available
│ └── *.conf
└── sites-enabled
└── *.conf -> ../sites-available/*.conf
Elementi di Configurazione
File Principale
Il file di configurazione principale è /etc/apache2/apache2.conf
.
vim /etc/apache2/apache2.conf
Originariamente questo file di configurazione era molto lungo, ora è stato accorciato e segmenti di configurazione si trovano in sottodirectories di /etc/apache2
.
envvars
Prima di leggere il file di configurazione principale, Apache crea delle variabili d'ambiente dal file /etc/apache2/envvars
.
vim /etc/apache2/envvars
Non è necessario editare quest'ultimo file a meno di configurazioni diverse dal default.
magic
Contiene l'associazione tra i tipi MIME e i magic numbers di Unix.
Un magic number è l'etichetta composta da alcuni bytes che si trova all'inizio di un file e che ne dichiara il tipo. Unix non usa estensioni del nome, ma magic numbers.
Il tipo MIME (Multimedia Internet Mail Extensions) è il metodo standard Internet per dichiarare un tipo di file.
ports
La specifica delle porte usate dal server.
mods
Lista di tutti i moduli di Apache:
mods-available/*.load
- moduli disponibilimods-enabled/*.load
- moduli abilitati, comando di caricamento del modulomods-enabled/*.conf
- eventuale configurazione di un modulo abilitato
In mods-enabled
i files sono dei link simbolici ai corrispondenti files di mods-available
.
sites
Siti virtuali configurati:
sites-available/*.conf
- configurazione di un sito virtuale disponibilesites-enabled/*.conf
- configurazione di un sito virtuale abilitato
In sites-enabled
i files sono dei link simbolici ai corrispondenti files di sites-available
.
Inizialmente vi sono due configurazioni disponibili:
000-default.conf
- sito di base HTTP senza SSLdefault-ssl.conf
- configurazione di un sito HTTPS con SSL
Solo il sito di base HTTP è abilitato. HTTPS richiede la fornitura di un certificato.
conf
Segmenti di configurazione.
conf-available/*.conf
- configurazioni che estendono la capacità del server di baseconf-enabled/*.conf
- configurazioni abilitate
In conf-enabled
i files sono dei link simbolici ai corrispondenti files di conf-available
.
Tutte le configurazioni extra disponibili sono abilitate.
Configurazione della Versione Unix/Alpine
Una struttura di configurazione molto più semplice:
/etc/apache2
├── conf.d
│ ├── default.conf
│ ├── info.conf
│ ├── languages.conf
│ ├── mpm.conf
│ └── userdir.conf
├── httpd.conf
├── magic
└── mime.types
Elementi
magic
della versione Unix
Associa i tipi MIME ai magic numbers standard di Unix.
mime.types
Associa i tipi MIME alle estensioni dei nomi dei file. Questa versione può essere usata anche su sistemi operativi, come Windows, che non usano magic numbers.
File Principale della versione Unix
E' httpd.conf
e contiene molte più informazioni qui aggregate che non il corrispondente file principale dalla versione Ubuntu.
Per esempio qui vi è la lista dei moduli.
conf.d
Directory con un numero limitato di file di configurazione di estensioni, che vengono inclusi in httpd.conf
:
default.conf
- parametri globali del serverinfo.conf
- parametri per il route alias/status
languages.conf
- supporto a lingue oltre l'americano e set di caratteri oltre ASCIImpm.conf
- gestione del pool dei servers, o del numero di processi figli generatiuserdir.conf
- settaggi che consentono a sottodirectories di utenti di essere pubblicate dal server web oltre alla DocumentRoot principale
Note
La configurazione della versione Unix/Alpine di Apache è di più semplice comprensione, più tradizionale, e più adattabile a sistemi operativi diversi.
Parametri di Configurazione di Base
Sono qui descritti solo alcuni parametri, i più importanti. I files di configurazione sono peraltro ben commentati, e leggendoli si può comprendere il significato di tutti i parametri.
Questa esposizione segue la struttura della versione Unix. L'equivalente versione Debian mantiene i parametri in altri files. Per scoprire la loro esatta locazione si può compiere una ricerca con grep
, per esempio:
cd /etc/apache2
grep -r ServerRoot .
File httpd.conf
:
ServerRoot /var/www
- directory di base di tutti i files gestiti, p.es. anche i logsDocumentRoot "/var/www/localhost/htdocs"
- directory di base per le pagine staticheListen 80
- ascolta sulla porta 80ServerName www.example.com:80
- nome ufficiale del server. Se manca, viene preso allo start l'indirizzo IP del server, e prodotto un warningServerAdmin you@example.com
- posta elettronica dell'amministratoreServerSignature On
- aggiunge nel responso uno header con la versione del server e nome del virtual host. Possibilità:On | Off | EMail
. ConEMail
aggiunge anche unmailto:
all'amministratoreServerTokens OS
- quantità di Headers di identificazione da usare. Possibilità:Full | OS | Minor | Minimal | Major | Prod
.OS
: solo concernenti il sistema operativo.
File conf.d/default.conf
:
Timeout 60
- per il completamento di una richiesta, in secondiKeepAlive On
- se i client possono inviare più richieste nella stessa sessioneMaxKeepAliveRequests 100
- numero massimo di richieste per sessioneKeepAliveTimeout 5
- intervallo in secondi tra richieste successive nella stessa sessioneUseCanonicalName Off
- se identificarsi con il Fully Qualified Domain Name (FQDN) del DNS [On] o con ilServerName
[Off]HostnameLookups Off
- se risolvere a DNS l'indirizzo IP dei client delle richiesteAccessFileName .htaccess
- nome del file di override dei permessi di accesso per la directory corrente
User Directory
Una piattaforma Unix tradizionalmente configura parecchi utenti che vi possono compiere login.
Questo da la possibilità che tali utenti pubblichino le proprie pagine web, sotto la propria directory $HOME/public_html
.
Se il nome del server è www.example.com
e il nome dell'utente è paperino
, la URL per accedere alle pagine web di quell'utente è www.sample.com/~paperino
. Questo da il suo file index.html
.
Non serve a niente se il server web è in un contenitore Docker.
Configurata nel file conf.d/userdir.conf
:
<IfModule userdir_module>
UserDir public_html
<Directory "/home/*/public_html">
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Require method GET POST OPTIONS
</Directory>
</IfModule>
Lingue ed Encoding
Lingue
Si può cambiare la lingua in cui una pagina HTML è scritta con il tag principale:
<html lang="it">
o in uno span:
<p> French " <span lang="fr"> Bonjour </span> " </p>
o anche tramite uso opportuno di codice JavaScript.
Apache permette di ospitare varianti di un documento in più lingue, aggiungendo un suffisso, p.es. summary.html.fr
, summary.html.it
, ...
Se non vi è tale suffisso vale la lingua di default.
La selezione della lingua è spesso offerta da una voce di menù del browser. Viene compiuta una negoziazione con opportuni header nella richiesta e nel responso.
Il file conf.d/languages.conf
descrive le lingue accettabili al server.
Encoding
Una simile negoziazione avviene per lo encoding ovvero il metodo usato per rappresentare caratteri visivi in sequenze di byte.
I caratteri visivi venivano anche chiamati glifi (glyphs). Lo standard moderno Linux usa lo encoding UTF-8 con numero variabile di bytes. Con vocabolo preso dal Linguaggio Go, il carattere visivo o glifo si chiama runa, ed è diverso dal byte o bytes che lo rappresentano.
L'antico ASCII usa 7 bit per carattere. Le codifiche ISO-8859-x usano 8 bit per carattere; i codici 129-255 sono variabili e permettono in alternativa di rappresentare rune in cirillico, greco, ecc.
Lo standard cinese, introdotto dalla IBM, si chiama Big 5. Il Giappone ha una serie di standard JIS (Japanese Industry Standard). Unicode prometteva di uniformare la situazione ma ha infatti introdotto molte varianti.
Il server Apache supporta molti encodings, i browser solitamente permettono di selezionare quello visualizzato.
Una pagina HTML dichiara lo encoding nella testata, per esempio:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
...
oppure
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8">
...
Multi Process Management
Apache usa il metodo no wait di gestione del servizio. Le richieste non sono gestite direttamente dal processo principale, che solo riceve le richieste sul listen port 80.
All'arrivo di una richiesta il server principale la passa ad un processo figlio, nello stesso Cgroup, che apre una porta effimera e prosegue la connessione col client.
La gestione dei processi figli si chiama Multi Process Management (MPM), ed è congigurata nel file conf.d/mpm.conf
.
Vi sono più tipi di MPM:
- prefork MPM
- worker MPM
- event MPM
- NetWare MPM
- OS/2 MPM
- WinNT MPM
Il funzionamento dei vari MPM dipende dalle strutture architettoniche del kernel del sistema operativo ospitante.
Quale MPM sia selezionato dipende dall'abilitazione di un modulo anzichè un altro.
Apache su Linux usa prefork MPM nella versione Unix e event MPM nella versione Debian.
Il segmento di controllo di prefork MPM è:
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 250
MaxConnectionsPerChild 0
</IfModule>
StartServers
- processi inizialiMinSpareServers
- numero minimo dei processiMaxSpareServers
- numero massimo dei processiMaxRequestWorkers
- numero massimo di richieste per processoMaxConnectionsPerChild
- numero massimo di connessioni per processo [0
: terminare la connessione e il processo dopo il servizio al client]