Ya hay 2 buenas respuestas, pero quizás el tema más importante de la vida real aún no se menciona.
En primer lugar, el OP podría querer leer las 2 respuestas anteriores y esta pequeña publicación de blog para comprender qué son los keepalives. (El autor no explica por qué TCPI / IP se vuelve "más rápido" cuanto más tiempo se abre la conexión. Es cierto, las conexiones más duraderas se benefician del escalado de la ventana IP , pero el efecto no es significativo a menos que los archivos sean grande, o el producto de retraso de ancho de banda es inusualmente grande).
El gran argumento contra HTTP Keepalive cuando se usa Apache es que bloquea los procesos de Apache. Es decir, un cliente que usa keepalives evitará que 'su' proceso de Apache sirva a otros clientes, hasta que el cliente cierre la conexión o se agote el tiempo de espera. En el mismo lapso de tiempo, esta instancia de Apache podría haber servido muchas otras conexiones.
Ahora, una configuración de Apache muy común es Prefork MPM y un intérprete PHP / Perl / Python, y el código de la aplicación en el idioma mencionado. En este caso, cada proceso de Apache es "pesado" en el sentido de que ocupa varios megabytes de RAM (Apache vinculado con el intérprete y el código de la aplicación). Esto, junto con el bloqueo de cada instancia de Apache keepalive'd, es ineficiente.
Una solución común es usar 2 servidores Apache (ambos en el mismo servidor físico o en 2 servidores, según sea necesario) con diferentes configuraciones:
- uno "pesado" con mod_php (o cualquier lenguaje de programación utilizado) para contenido dinámico, con keepalives desactivado .
- uno "ligero" con un conjunto mínimo de módulos, para servir contenido estático (imagen, css, js, etc.), con keepalives activado .
Luego puede expandir esta separación de contenido dinámico y estático cuando sea necesario , por ejemplo:
- utilizando un servidor controlado por eventos para contenido estático, como nginx .
- usando un CDN para contenido estático (podría hacer que todo el contenido estático sirva para usted)
- implementar el almacenamiento en caché de contenido estático y / o dinámico
Otro enfoque con respecto a evitar el bloqueo de Apache es usar un equilibrador de carga con un manejo de conexión más inteligente, como Perlbal .
.. y mucho más. :-)