Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Configurazione: limiti su risorse e connessioni

Gestire le direttive di configurazione di Apache relative alla gestione delle connessioni e delle richieste
Gestire le direttive di configurazione di Apache relative alla gestione delle connessioni e delle richieste
Link copiato negli appunti

In base alla velocità e alla capienza dell'hardware che equipaggia la macchina su cui è installato, Apache dev'esser istruito al fine di non saturare le risorse disponibili nel caso di molte richieste concorrenti, dimensionando opportunamente il loro numero massimo. Questo risultato non può esser ottenuto con sufficiente affidabilità per via teorica, bensì mediante test "sul campo" in un utilizzo reale (reti lente, larghi file da creare e quindi trasferire, traffic spike, e così via).

Se Apache gira in prefork mode, come avviene per default, ogni richiesta è gestita da un processo separato, quindi per cento richieste parallele saranno richiesti cento processi, i quali occuperanno un dato quantitativo di memoria (RAM e virtuale). Al riguardo, i comandi qps o top danno una buona idea di ciò che avviene sulla macchina.

Per evitare la saturazione della memoria (che dipende anche e soprattutto dai linguaggi di scripting invocati da Apache), dal test detto e tramite pratica, possiamo giungere al valore ideale di MaxClients, che è appunto la direttiva che all'interno del file di configurazione limita le richieste concorrenti al Web server.

Una pratica che snellisce il carico CPU e può diminuire drasticamente il lavoro del database sottostante è l'utilizzo di tecniche di caching a cura delle applicazioni Web coinvolte, ma non è nostro scopo affrontare l'argomento.

Per diminuire il traffico di rete, infine, è possibile usare mod_deflate per una compressione trasparente dei dati scambiati (HTTP 1.1 permette vari sistemi di encoding). Ciò aumenta però il carico CPU: l'utilizzo dipende dal tipo di applicazione/i che si intende avere.

Direttive sulle connessioni

Tali direttive se opportunamente configurate possono aiutare a prevenire l'insorgenza (...) di attacchi tesi al DoS o al DoS "naturale auto-inflitto". Generalmente sono relative all'intero server, anche se possono valere distintamente per virtual host. Ove applicabile, il valore 0 significa illimitato.

TimeOut <sec>
Specifica il tempo massimo (in secondi) relativo ad uno scambio dati HTTP.

KeepAlive <On|Off>
Specifica se usare connessioni persistenti (default per HTTP 1.1) o meno. Nel caso di connessioni persistenti, client e server non chiudono subito la comunicazione TCP dopo aver terminato uno scambio HTTP, ma la connessione di rete rimane aperta per più scambi HTTP (richieste e risposte) successivi. Ciò implica minor tempo per aprire e chiudere una connessione ma minor numero di connessioni possibili per client diversi (in ogni dato istante).

MaxKeepAliveRequests <num>
Massimo numero di richieste per connessione persistente (alto per massime performance).

KeepAliveTimeout <sec>
Tempo massimo nell'attesa di una nuova richiesta per la connessione persistente attiva. Scaduto questo tempo la connessione viene chiusa.

Le seguenti direttive definiscono il comportamento dei task Apache.

StartServers <n>
Processi da avviare inizialmente.

MinSpareServers <n> e MaxSpareServers <n>
Numero minimo e massimo di processi da tenere non occupati. Se i processi attivi in un dato momento fossero in difetto o eccesso rispetto ad essi, ne verrebbero creati di nuovi o uccisi alcuni rispettivamente.

MaxClients <n>
Già discusso.

MaxRequestsPerChild <n>
Massimo numero di richieste che un processo può servire.

Direttive sulle richieste

Le direttive seguenti impongono limiti su alcuni aspetti dei messaggi di richiesta HTTP che il browser invia ad Apache al fine di formulare, appunto, una richiesta. Correttamente configurate secondo limiti accettabili, possono prevenire particolari tipologie di DoS. Tra parentesi indichiamo la posizione di configurazione in cui possono essere inserite.

LimitRequestBody <byte> (server config, virtual host, directory, .htaccess)
Limita la grandezza del corpo del messaggio di richiesta (utile nei casi di metodi POST o PUT).

LimitRequestFields <n> (server config)
Definisce il massimo numero di header (linee di intestazione) nel messaggio di richiesta.

LimitRequestFieldsize <byte> (server config)
Limita la grandezza di ogni header del messaggio di richiesta.

LimitRequestLine <byte> (server config)
Limita la lunghezza della linea di richiesta in un messaggio di richiesta. In essa sono specificati URL, metodo e protocollo (HTTP(S),1.0 o 1.1, o altro) e vengono inviati parametri in GET: la lunghezza massima dell'URL specificabile da browser è definita qui.

LimitXMLRequestBody <byte> (server config, virtual host, directory, .htaccess)
Limita la grandezza del corpo del messaggio di richiesta XML (per body XML-based - mod_dav o altro).

Ti consigliamo anche