Ottimizzazione della configurazione di Apache

Apache prevede nel file di configurazione di default una serie di direttive (alcune soltanto commentate) che da un lato ne aumentano le proprietà e le funzionalità, dall'altro impattano in modo  non trascurabile sulle performance del sistema.
Alcune di queste impostazioni possono essere necessarie per il nostro servizio e non se ne può prescindere, altre, spesso, risultano di fatto inutilizzate ed inutilmente configurate.
Vediamo alcuni casi.

REVERSE DNS LOOKUP DEI CLIENT
Ogni richiesta HTTP che arriva al server viene fatta da un HOST in rete con un proprio indirizzo IP che viene loggato da Apache. E' possibile scegliere se provare anche a loggare il nome dell'host completo invece dell'IP, facendo una apposita query DNS (un REVERSE LOOKUP, che da un IP cerca di ottenere il rispettivo hostname). Assicurarsi che questa funzionalità venga disattivata e che Apache non perda tempo a risolvere gli indirizzi IP:
HostNameLookup off
Esistono svariati e migliori modi per procedere alla risoluzione degli IP loggati da Apache in un tempo successivo per dare statistiche sul traffico Web indicative si domini da cui arrivano i client.

GESTIONE DEI SYMLINK
Con la direttiva Options si può istruire Apache su come gestire i link simbolici.
Si può impedirgli di seguirli al di fuori della sua DocumentRoot o gli si può forzare un controllo sull'owner del link. Si risparmiano chiamate di sistema aggiuntive, e cicli di clock, se si evita ad Apache l'onere di controllare se un file è un link simbolico o no e, ancor più, di verificare il suo owner.
In termini di performance quindi la migliore scelta per qualsiasi container è :
Options FollowSymLinks che dice ad Apache di seguire i symlink e di non stare a controllarne l'owner.
Considerare che questa direttiva (insieme a Options SymLinksIfOwnerMatch) hanno una loro ragione d'essere in termini di sicurezza, per cui, come spesso accade, va valutato il giusto compromesso.

GESTIONE DEGLI OVERRIDE
La direttiva AllowOverride permette di definire in file separati (.htaccess) delle configurazioni specifiche per le directory in cui si trovano e in quelle figlie. In termini di performance l'abilitazione dell'Override comporta da parte di Apache una serie di controlli sull'esistenza effettiva del file .htaccess che inevitabilmente impattano sulle prestazioni. Per questo motivo, salvo eventualmente le directory in cui è strattamente necessario, si consiglia vigorosamente di disattivare l'override della configurazione generale con file locali .htaccess:
<Directory/>
AllowOverride None
</Directory>

Questo, per una volta, da benefici anche in termini di sicurezza.
Disattivando gli override diventa pleonastica anche la seguente parte di configurazione, presente negli httpd di default, che quindi può essere commentata:
#AccessFileName .htaccess

#<Files ~ "^\.ht">
#    Order allow,deny
#    Deny from all
#    Satisfy All
#</Files>


STATUS E EXTENDED STATUS
Il mod_status fornisce un utile strumento di diagnostica, la location /server-status consultabile per visualizzare in tempo reale lo stato delle connessioni al server web. Con la direttiva ExtendedStatus, inoltre, è possibile visualizzare  ulteriori interessanti informazioni.
Inutile dire che anche queste funzionalità impattano sulle risorse del sistema, in particolare l'ExtendedStatus, per cui, salvo necessità specifiche è bene disattivarle. Nel httpd.conf di default sono già scommentati:
#<Location /server-status>
#    SetHandler server-status
#    Order deny,allow
#    Deny from all
#    Allow from .your-domain.com
#</Location>
#ExtendedStatus On


COOKIE E SESSION TRACKING
Tracciare le sessioni di navigazione degli utenti tramite cookie o altri strumenti può essere comodo per l'analisi dei log o fondamentale per il corretto funzionamento di certi siti dinamici, ma se non serve è bene farne a meno, disattivando direttamente il relativo modulo:
#LoadModule usertrack_module   lib/apache/mod_usertrack.so
#AddModule mod_usertrack.c

Di fatto, anche caricando questo modulo, Apache non setta cookie a meno che non si indichino le specifiche direttive (  CookieDomain, CookieExpires, CookieName ...)

CONTENT NEGOTIATION
In genere, la documentazione di Apache suggerisce che i vantaggi di poter gestire la content negotiation prevalgono sui benefici in termini di prestazioni che si hanno disattivandola.
Un eccezzione è la direttiva DirectoryIndex, che accetta anche nomi di file senza suffissi (es: DirectoryIndex index) ma che è preferibile definire per ogni file che si vuole utilizzare come home page:
DirectoryIndex index.php index.htm index.html index.cgi

LIMITAZIONE DEL LOGGING
Di default Apache logga ogni richiesta ricevuta per cui scrive, per ogni file servito, almeno una riga di log in un file aperta del proprio file system. In server particolarmente affollati questa operazione può determinare un ulteriore appesantimento del sistema (oltre che enormi file di log difficili da gestire).
L'access log può essere completamente disattivato oppure limitato alle sole richieste di pagine (senza appesantirlo con il logging delle GET a immagini e altri file collaterali), l'error log, che non può essere disattivato, può essere impostato per abbassare il numero di informazioni da loggare:
LogLevel error (di default è "warn).
Per disabilitare l'access loggin basta commentare ogni direttiva CustomLog o TransferLog:
# CustomLog /var/log/httpd/access_log common

RIMOZIONE DI MODULI INUTILIZZATI
La configurazione di Apache permette, tramite la funzione IfModule, di attivare una serie di direttive soltanto se il modulo che le fornisce è presente. In questo modo è possibile testare le funzionalità del web server, attivando o disattivando intere sezioni di configurazione, semplicemente commentando la riga che carica il relativo modulo:
#LoadModule perl_module modules/libperl.so
Inoltre, aiutandosi con le informazioni fornite da server-info, è possibile rimuovere direttamente i moduli che forniscono direttive che non vengono nemmeno considerate.
Per migliorare le prestazioni e diminuire l'occupazione di memoria di Apache, si può evitare di caricare tutti i moduli che non servono sia perchè non si utilizzano per niente le relative direttive, sia perchè si decide di rinunciare alle funzionalità offerte da direttive incluse in un container IfModule.

Privacy Policy