Ci sono già 2 buone risposte, ma il problema forse più importante della vita reale non è ancora menzionato.
Prima di tutto, l'OP potrebbe voler leggere le 2 risposte precedenti e questo piccolo post sul blog per capire cosa sono i keepalive. (L'autore non elabora la parte in cui TCPI / IP diventa "più veloce" più a lungo è aperta la connessione. È vero, le connessioni più durature beneficiano del ridimensionamento della finestra IP , ma l'effetto non è significativo a meno che i file non siano grande o il prodotto con ritardo di banda è insolitamente grande.)
Il grande argomento contro HTTP Keepalive quando si utilizza Apache è che blocca i processi Apache. Vale a dire un client che utilizza keepalives impedirà al "suo" processo Apache di servire qualsiasi altro client, fino a quando il client non chiude la connessione o non viene raggiunto il timeout. Nello stesso lasso di tempo, questa istanza di Apache avrebbe potuto servire molte altre connessioni.
Ora, una configurazione Apache molto comune è Prefork MPM e un interprete PHP / Perl / Python e un codice dell'applicazione nella lingua menzionata. In questo caso ogni processo di Apache è "pesante", nel senso che occupa diversi megabyte di RAM (Apache collegato con l'interprete e il codice dell'applicazione). Questo, insieme al blocco di ogni istanza di Apache keepalive, è inefficiente.
Una soluzione alternativa comune consiste nell'utilizzare 2 server Apache (entrambi sullo stesso server fisico o su 2 server, se necessario) con diverse configurazioni:
- uno "pesante" con mod_php (o qualunque linguaggio di programmazione utilizzato) per contenuti dinamici, con keepalive disattivato .
- uno "leggero" con un set minimo di moduli, per servire contenuto statico (immagine, css, js ecc.), con keepalive attivo .
È quindi possibile espandere questa separazione di contenuto dinamico e statico quando necessario , ad esempio:
- utilizzando un server basato su eventi per contenuto statico, come nginx .
- utilizzando un CDN per contenuto statico (potrebbe fare tutto il contenuto statico che serve per te)
- implementare la memorizzazione nella cache di contenuto statico e / o dinamico
Un altro approccio per evitare il blocco di Apache consiste nell'utilizzare un bilanciamento del carico con una gestione delle connessioni più intelligente, come Perlbal .
.. e altro ancora. :-)