En el pasado hemos hablado mucho sobre los diferentes tipos de servidores web y ha sido inevitable comparar al viejo y clásico Apache HTTP server server con otros nuevos servidores que han surgido en los últimos años.
Si bien Apache sigue siendo uno de los servidores web más usados del mundo, ha ido perdiendo terreno año a año frente a nuevas y más serias alternativas que permiten hacer lo que hace Apache, pero de manera más eficiente y rápida, haciendo que nuestras aplicaciones carguen a máxima velocidad.
Por su lado, Nginx surgió en el año 2004, y fue desde principios de la década de 2010 que se popularizó de forma avasallante. LiteSpeed nació incluso antes, en 2003, y no fue -al igual que Nginx- hasta hace pocos años que comenzó a verse adoptado masivamente por proveedores de web hosting, datacenters y finalmente desarrolladores.
Al día de hoy, de acuerdo a W3Techs, el líder indiscutido es Nginx, seguido por Apache y luego Cloudflare:
No es sorpresa que LiteSpeed no esté allí, pues su cuota de mercado es muy pequeña, pero eso no quiere decir que sea un servidor no más rápido, seguro o estable que Nginx o Apache. Por eso hoy analizaremos pros y contras de cada uno de estos tres servidores web. ¡Comencemos!
Contenido
Comparación Apache vs Nginx vs LiteSpeed
Cuando hablamos de montar un servidor web hoy por hoy nos encontramos con muchísimas opciones, muchas más que hace años atrás. Si alguna vez te has preguntado:
- ¿Cuál es el servidor web más rápído?
- ¿Cuál es el servidor más seguro?
- ¿Qué servidor es mejor?
- ¿Qué tan difícil es instalar Apache, Nginx o LiteSpeed?
- ¿Cuál es el precio de estos servidores?
- ¿Son compatibles con archivos .htaccess?
- ¿Qué lenguajes de programación soportan?
Entonces llegaste al lugar indicado.
Hace unos días hemos corrido una encuesta entre los usuarios de Twitter de nuestra cuenta @Infranetworking para ver qué servidor web era el que favorito de ellos, yhan surgido un par de datos interesantes a tener en cuenta.
Como vemos en el resultado, a pesar de que hoy hay muchos servidores más modernos, al menos de 638 personas que votaron, un 68% manifestó que siguen pegado a Apache como servidor preferido.
¿Será el más votado por su rendimiento? ¿Facilidad de instalación? ¿Compatibilidad con lenguajes? ¿Es Apache lo mejor para tu sitio web en lo que a servidor web se refiere?
Entre las opiniones que recogimos de los usuarios muchos eligieron Apache por estas razones:
- «Apache. Mega personalizable. Solido. Libre.»
- «Apache, es un servidor super potente.»
- «Apache. Lo manejo y configuro rápidamente.»
Otros eligieron Nginx, por lo siguiente:
- «Nginx, más personalizable y sencillo que Apache, que conste que el primero que usé fue Apache con PHP, desde hace un tiempo me cambié a Nginx»
- «Nginx porque la configuración es muy sencilla y soporta muchas más conexiones simultáneas»
Comencemos entonces a analizar estos los servidores Apache vs Nginx vs Litespeed para obtener más respuestas.
Instalación
Analizando la instalación de Apache, Nginx y LiteSpeed, nos encontramos con que todos ofrecen una instalación sencilla.
En el caso de LiteSpeed, al no estar integrado en repositorios oficiales de distribuciones Linux populares (como pasa con Apache y Nginx), hay que incurrir en algún que otro paso más para instalarlo, pero eso no significa que sea difícil hacerlo, sólo lleva un poco más de trabajo.
Ejemplo instalando Apache en CentOS y Ubuntu:
yum install httpd yum install nginx
apt-get install apache2 apt-get install nginx
Mientras que en LiteSpeed hay que descargar el paquete instalador a mano, descomprimirlo y luego correrlo, ejemplo:
wget http://www.litespeedtech.com/packages/5.0/lsws-5.0.12-ent-x86_64-linux.tar.gz tar -zxvf lsws* ./install.sh
En este aspecto, llevan la delantera Apache, Nginx y en un segundo lugar LiteSpeed por ese pequeño detalle, que puede ser una contra para algún novato que no tiene muchos conocimientos de consolas y Linux.
Plataformas
Apache desde su nacimiento fue un servidor web creado originalmente para sistemas basados en Unix, esto incluye a Linux también. Con los años fue portado a Windows, por lo que es 100% multiplataforma.
Nginx en su lugar también ha hecho un buen trabajo, ya que está soportado tanto en Unix, Linux y Microsof Windows. Es muy popular su uso en distros como Ubuntu, Debian, CentOS, Fedora y RHEL, así como en FreeBSD.
Por otra parte, LiteSpeed a pesar de tener casi la misma edad que Nginx, aún no corre sobre Windows, sólo está disponible para Linux y Unix (FreeBSD). La mayor compatibilidad con Windows que encontramos es a través del proyecto Mono para ASP.NET a través de FCGI, aunque no es un verdadero soporte Windows.
Aquí llevan la ventaja Apache y Nginx sin lugar a dudas.
Rendimiento
Aquí llega la parte divertida: ¿Qué tal son en cuanto a rendimiento despachando archivos estáticos y dinámicos?
Apache
Para poder analizar el rendimiento de cada uno y dar un veredicto, es necesario primero entender cómo funciona un servidor, para ello lo ideal será analizar la arquitectura del software que gestiona las conexiones HTTP, así como la forma en que se interpreta cada solicitud de parte de los clientes, así como la configuración y forma de despachar archivos estáticos y dinámicos.
El servidor web Apache HTTP, es un server que tiene su arquitectura de software diseñada para trabajar en base a procesos, esto significa que por cada request que va a despachar, Apache genera un hilo en el servidor, esto hace que se usen los recursos de forma incorrecta, gastando CPU y RAM de forma innecesaria.
Si el número de requests se multiplica (como sucede en sitios de alto tráfico), lo que sigue es que desencadena una sobrecarga en el servidor, no llegan respuestas a los usuarios al cargar los sitios o llegan con extrema lentitud a medida que se liberan las conexiones.
Casi siempre Apache viene configurado con el módulo módulo Prefork (mpm_prefork), que justamente es el culpable de generar estos procesos que usan un solo hilo para procesar cada solicitud, donde cada proceso child (hijo) es capaz de administrar una conexión por vez.
En caso de que Apache esté configurado para usar mpm_event, que se basa en eventos, la diferencia no será grandiosa, pues es la misma implementación que Prefork, pero la diferencia radica en que se hace de forma asincrónica. Suele dar mejores resultados que worker ya que los hilos se manejan de forma más optimizada, pero ante avalanchas de tráfico el resultado final suele ser el mismo.
Incluso usando el módulo mpm_worker, Apache hace uso de la tecnología multithreading para procesar los hilos de forma más eficiente ante las solicitudes de los usuarios generando un thread por cada conexión TCP.
Si bien el módulo worker no hace uso de tantos recursos como prefork o event, y soluciona la simultaneidad de conexiones de una forma un poco más evolucionada, sigue sin solucionar el problema de fondo.
El servidor Nginx por su lado, ha evolucionado bastante más pues fue concebido teniendo como ejemplo el pobre rendimiento de Apache frente a sus ojos.
Nginx
Nginx por otro lado utiliza un modelo de proceso totalmente diferente respecto a Apache, y tiene la ventaja que se ajusta automáticamente que al hardware que tengas, se podría decir que es un servidor web mucho más evolucionado que Apache.
Cuenta con un proceso master que es el encargado de realizar tareas críticas de bajo nivel como enlace al puerto 80 o 443 o la configuración de lectura del servidor. Luego existen otros tipos de procesos secundarios de Nginx que se encargan de otras tareas.
Estos procesos secundarios son los procesos de carga de cache (el que se ejecuta al inicio del servicio Nginx para hacer la carga del cache basado en disco o memoria), es un proceso ultra rápido, que se abre y se cierra una vez está cargado el cache.
En segundo lugar encontramos al proceso que administra la cache, el cual se ejecuta esporádicamente y es el que elimina las entradas de cache obsoletas del disco o memoria (según como lo tengamos configurado) para mantenerlas dentro de los límites establecidos en Nginx mediante proxy_cache_valid.
Y en tercer lugar encontramos los procesos de trabajo o workers, ellos son los que administran todas las conexiones de red, escriben y leen en disco, además de comunicarse con otros servicios.
Son estos últimos, los procesos workers, o de trabajo, los que encontramos activos cuando Nginx corre de forma normal. Cada uno se encarga de administrar múltiples conexiones entrantes, sin bloqueos entre si, de forma paralela.
Se componen de un solo hilo de ejecución que corre de forma independiente, lo que le permite aceptar peticiones entrantes y procesarlas de forma ultra rápida.
Cada proceso de trabajo es de un solo hilo y se ejecuta de forma independiente, capturando nuevas conexiones y procesándolas. Estos procesos se usan generalmente por la memoria compartida, sesiones persistentes y otros recursos compartidos de Nginx.
Al iniciarse un proceso worker de Nginx se lee la configuración de Nginx (nginx.conf) y se le atribuyen un conjunto de sockets de escucha a través del proceso master. El proceso worker tiene la tarea de esperar eventos en los sockets de escucha asignados (en particular accept_mutex y kernel socket sharding).
Cada evento se inicia debido a las nuevas conexiones entrantes que vienen hacia el servidor se asignan a una state machine (máquina de estados). Nginx hace uso de las state machines tanto para el tráfico HTTP/HTTPS, como también para otros protocolos como TCP, así como SMTP, IMAP y POP3.
La forma en que Nginx interactúa con la state machine es lo que le hace tan rápido, la state machine le indica cómo procesar las instrucciones de cada petición entrante. La magia de la velocidad reside en el procesamiento de las peticiones, algo que hace con un costo de memoria realmente bajo, soportando una altísima concurrencia.
A diferencia de otros servidores tradicionales, Nginx usa una tecnología asincrónica y basada en eventos donde cada petición se maneja en un solo hilo. Debido a la asincronicidad, Nginx permit que cada solicitud pueda ser ejecutada por el proceso worker simultáneamente sin bloquear otras solicitudes.
Esta gran ventaja en velocidad, sumado a que puede ser usado con muchísimos fines (servidor proxy inverso con caché, Balanceador de Carga, Soporte de Websockets, Servidor de Correo, Archivos estáticos y Dinámicos con FastCGI) han hecho que sea una de las mejores opciones alternativas a Apache o Lighttpd.
Gracias a la popularidad de Nginx, los servidores LEMP ya son una realidad.
LiteSpeed
Llegamos a una de las mayores revoluciones del mundo del rendimiento web: LiteSpeed. Este es un servidor que como ya dijimos, no es nuevo, pues es incluso más viejo que Nginx, pero que ha tomado mucha popularidad en los últimos años.
La gran diferencia que tiene LiteSpeed respecto al clásico Apache por ejemplo, es que basa su arquitectura entorno al uso de procesos, y no eventos.
Como ya mencionamos antes, Apache genera un nuevo hilo para cada conexión que se abre, y esto hace que se gasten muchos recursos del equipo donde corre.
En su lugar, generando eventos, LiteSpeed usa muchísimos menos procesos, ahorra recursos y logra tener un tremendo impacto en el rendimiento del equipo, así como en la velocidad de despacho de la web.
El proceso que maneja las conexiones siempre se mantiene abierto, permitiéndole administrar todos los eventos que se generan (peticiones y respuestas del web-server). LiteSpeed Web Server no creará nuevos procesos, sino que simplemente reaccionará a los eventos nuevos que surjan, optimizando la velocidad de despacho significativamente.
A nivel de contenido estático (nos referimos a archivos como Javascript, HTML, CSS o imágenes) se nota una tremenda ventaja en comparación a Apache cuando se trata de medir uso de CPU, Memoria o Acceso al Disco.
Para manejar las conexiones dinámicas por otro lado, LiteSpeed envía solicitudes contínuamente y cuando una de éstas obtiene respuesta ante un nuevo evento, se genera una devolución o despacho de la información para con el cliente que la solicita.
Aquí es donde entra en juego LSAPI, la API principal del servidor LiteSpeed. Es la que se encarga de mantener el uso de procesos, controla la cantidad de procesos usados (generalmente se usa uno, pero pueden usarse más) ante la demanda de las aplicaciones web que hacen peticiones, y trata de mantenerlos siempre reutilizándose para evitar cargas extras a los recursos del web server.
Esto es especialmente útil no sólo para webs pequeñas, sino también para sitios webs que tienen alta demanda de tráfico web generando miles de conexiones simultáneas.
En estos escenarios, las ventajas de tener un uso de la CPU y la memoria de un servidor 100% controlado mediante el uso de servidores basados en eventos son gigante. Ésto es lo que le permite a LiteSpeed despachar el contenido de forma rápida durante todo momento. Logra así ganar más memoria libre, menor uso de CPU e intercambio en información a nivel de disco.
Esta tecnología le permite también al igual que Nginx, resistir muchísimo mejor ataques DDOS.
Benchmark
Durante nuestras pruebas de rendimiento entre Apache, Nginx y LiteSpeed utilizamos tres servidores Servidor Cloud Beta con estas características:
Hardware
- 2 CPU E5-5660v2
- 2 GB RAM
- 30 GB Disco SSD
- 1GBps Uplink
- Apache 2.4
- Nginx 1.15.8
- LiteSpeed 5.3.5
- PHP: 7.2
- OS: CentOS 7.x 64 bits
Configuración del Servidor
- Keepalive activo.
- Gzip activado.
- Cache de archivos estáticos activado.
- Configuración estándar en el resto.
Aplicaciones
Intentamos usar un escenario común para un stack de aplicaciones moderno y que solicitan mucho nuestros clientes.
- CMS: WordPress 5.x.
- Temas: Newspaper.
- Plugins de Cache: W3 Total Cache con Cache en Disco SSD
- Plugins SEO: Yoast SEO
- Plugins Sociales: WPUpper Sharing Buttons
- 10 imágenes en el index del sitio en forma de cuadrícula.
- 3 imágenes y 1 vídeo de youtube en el post/artículo.
- 1200 palabras de texto lorem-ipsum.
- 5 comentarios genéricos con avatares cargados desde Gravatar
- Código de tracking de Yandex Metrica y Adsense
- Certificado de Seguridad Positive SSL de Comodo
- CDN: desactivado.
Bajo este escenario, tratamos de reproducir el tipo de web más común que se ve hoy en día utilizando WordPress como gestor de la página web.
Estos sitios no se probaron con tráfico real en el medio de las pruebas, sino que son benchmarks con tráfico simulado.
Para simular un tráfico lo más parecido al real, hemos utilizado una herramienta externa que evalúa el rendimiento del servidor web. En este caso usamos WebPageTest, con Chrome como navegador web, desde Dulles, Vancouver como única ubicación.
WebPageTest nos ofrece las posibilidades de medir la velocidad de despacho de una web, así como las tecnologías de procesamiento de datos soportadas (Gzip, Brotli, KeepAlive, etc), así como el tránsito de red y latencias de forma estandarizada.
A su vez, para que hubiera un tráfico intermedio y que no fuera una prueba con los servidores 100% libres en cuanto a recursos, hemos enviado 100 requests con 10 simultáneas con Apache Benchmark a cada web server.
Estos fueron los resultados finales:
Este benchmark rápido que hicimos nos muestra a LiteSpeed como claro ganador, seguido del poderoso Nginx.
Pero como no estamos aquí sólo para evaluar el rendimiento, sigamos analizando otras áreas que también son muy importantes a la hora de elegir nuestro servidor web.
Seguridad
Hardening de Cabeceras HTTP: todos permiten al usuario realizar un hardening del servidor a nivel de las cabeceras HTTP (Strict-Transport-Security, X-Frame-Options, X-XSS-Protection, X-Content-Type-Options, Referrer-Policy Feature-Policy, Content-Security-Policy), protegiendo ante ataques y filtrando también información vital que muchas veces puede revelar vulnerabilidades del servidor tales.
Correr como usuario y grupo propio: otra característica que cumplen los tres servidores, pueden correrse con su usuario y grupo propio, ajeno a otros usuarios de sistema, algo fundamental para mantener la seguridad y evitar escaladas de privilegios innecesarias.
Chroot: Apache y Nginx pueden correr bajo chroot sin problemas, sin embargo no tienen soporte nativo para éste. A diferencia de LiteSpeed, que si lo tiene, tal como lo demuestra su documentación.
Encriptación SSL/TLS: todos permiten encriptar las conexiones via SSL/TLS, por lo que ofrecen navegación segura para los visitantes.
Soporte WAF: los tres soportan firewalls de aplicaciones (WAF) sin problema, ofreciendo protecciones contra ataques XSS, inyecciones SQL, etc.
AntiDDOS: esta es una de las características de un servidor web que más se buscan, es decir, que tenga la mejor respuesta para mitigar ataques DDOS. En este aspecto, tenemos que relacionar directamente el rendimiendo basado en la arquitectura, por lo cual Nginx (con un buen tweaking de variables como limit_req y limit_conn puede hacer maravillas) y LiteSpeed (con su propio modo AntiDDOS) son mucho más seguros que Apache a la hora de mitigar un ataque masivo.
Autenticación HTTP / Allow/Deny: todos también se caracterizan por soportar mecanismos de seguridad básicos de servidor web como lo son la autenticación HTTP básica, o bien las reglas de allow / deny para filtrar tráfico según su origen.
AntiHotlinking: otra característica soportada por los tres, es la forma de proteger tus imágenes y demás recursos estáticos para que nadie pueda usar tu ancho de banda.
Soporte y Ayuda
Documentacion: hoy en día tener un proyecto bien documentado es vital, y si hablamos de estos servidores web debemos destacar que todos cuentan con una gran documentación. La ventaja que lleva Apache en este caso sobre los demás es que está en múltiples idiomas, el español está traducido perfectamente, una gran carencia que tiene su competencia al día de hoy.
Foros: Nginx tiene un foro, algo viejote pero tiene, y LiteSpeed usa un moderno foro para brindar Soporte Técnico y Discusiones con otros usuarios donde cualquier persona puede solicitar ayuda. Apache en cambio sólo ofrece listas de correo, que es lo más parecido, y un método que -incluso las personas con perfil técnico- pocos usamos hoy en día.
Soporte técnico personalizado: tanto LiteSpeed como Nginx brindan soporte técnico especializado y personalizado cuando adquieres una licencia comercial de sus productos. Apache en cambio no tiene un equipo técnico que brinde soporte a empresas, si necesitas soporte tendrás que buscar la solución por ti mismo.
Compatibilidad
Lenguajes de programación: todos ofrecen compatibilidad con lenguajes populares utilizados en desarrollo web como lo son PHP, Python, Ruby o NodejS.
Archivo .htaccess: el soporte para interpretar archivos .htaccess junto con sus instrucciones es una de las cosas más buscadas cuando los programadores intentan salir de Apache. Y hasta hace algunos años cuando pensaban en migrar siempre aparecía Nginx como alternativa, que dicho sea de paso no soporta lectura de .htaccess, sino que tiene su propio lenguaje de rewrites. Sin embargo, con el auge de LiteSpeed vale recordar que no sólo lo lee e interpreta, sino que no se ve afectado por la lentitud que tiene Apache al procesarlo.
Paneles de Control: en el mundo del hosting compartido se utilizan paneles de control para administrar ciertos aspectos del servidor web. Apache es compatible con todos los paneles de control de la industria, LiteSpeed le sigue de cerca, soportando opciones populares como cPanel, Plesk y DirectAdmin, mientras que Nginx está soportado oficialmente sólo en modo proxy por Plesk.
CloudLinux: tanto Apache, Nginx y LiteSpeed soportan el famoso sistema operativo enfocado en la seguridad CloudLinux, el cual trae consigo una suite de herramientas y entornos de jaulas virtuales que son vitales para mejorar la seguridad ante ataques. Así que si piensas en usar tecnologías como LVE, CageFS y el selector de PHP/Ruby/Python, podrás hacerlo sin problema, todas están soportadas.
Curva de Aprendizaje
Configuración:
La configuración de Apache desde tiempos inmemoriales debe ser manual, es decir, desde la consola de tu servidor Unix o Linux editando el archivo httpd.conf. Si bien hay paneles de control como Webmin, no son nativos, sino de terceros. Igual con Nginx en la versión open source, aunque en la versión Plus si tienen una interfaz web para hacerlo todo desde allí.
LiteSpeed por su parte, tanto en la versión open source como en la versión paga ofrece una interfaz web amigable desde donde configurar todo. En este punto lleva la delantera.
Sintáxis: la sintáxis utilizada por los tres servidores es sumamente sencilla, tienen algunas diferencias mínimas entre si, pero al final los conceptos de document_root, directory_index, y tantos otros suelen ser iguales al final, quizás algunos cambian en su nombre. Nginx es quizás el que más trabajo da a algunos desarrolladores, pero nada que la práctica no pueda mejorar.
Rewrites: en este caso los servidores con Nginx suelen dar un poco más de trabajo respecto a su competencia, pues no soportan el lenguaje nativo de .htaccess, lo que hace que los desarrolladores deban traducir las reglas de Apache/LiteSpeed hacia el lenguaje propio de Nginx. Aunque parezca como una desventaja, en realidad es una ventaja para los defensores de Nginx, pues gracias a esto es que es uno de los servidores más rápidos.
Precio
Apache: gratis desde siempre. Esto es gracias a su licencia de software libre y no-comercial que le permite distribuirse sin que tengas que pagar por él. Cualquier persona puede descargarlo desde Internet. No ofrece versiones comerciales o premium.
Nginx: gratis en la versión open-source, mientras que ofrece una versión llamada Nginx Plus que trae muchas mejoras, soporte técnico personalizado y herramientas como el monitoreo en vivo del servidor, entre otras cosas.
LiteSpeed: ofrece su versión OpenLiteSpeed de forma gratuita, aunque al igual que Nginx ofrece una versión paga llamada LiteSpeed
Tabla Comparativa
La siguiente tabla comparativa pretende resumir en pocas palabras el estado actual de los servidores web más populares en entornos Unix y Linux.
Servidor | Rendimiento | Seguridad | Soporte y Ayuda | .htaccess | Precio |
---|---|---|---|---|---|
Apache | Aceptable | Normal | Extensa | Soportado | Gratis |
Nginx | Rápido | Seguro | Extensa y personalizada | No soportado | Gratis y Pago |
LiteSpeed | Muy rápido | Seguro | Extensa y personalizada | Soportado | Gratis y Pago |
Conclusión
Como hemos podido ver, a nivel general tras analizar diversos aspectos como rendimiento, seguridad, compatibilidad, precio, soporte y ayuda, así como curva de aprendizaje, podemos concluir que hoy por hoy la mejor relación entre todas esas áreas las cumple LiteSpeed, incluso en su versión gratuita con OpenLiteSpeed.
Si tu presupuesto es bajo, OpenLiteSpeed podrá ayudarte sin duda alguna, donde obtendrás una magnífica velocidad de despacho, pero si puedes dar un paso más allá y pagar por una licencia oficial, te recomendamos hacerlo, pues darás el gran salto para obtener una web que levante vuelo literalmente.
Actualización: nos hemos enterado que para aquellos que tienen necesidades simples (dominio de nivel superior único y un server con <2 GB de RAM) no necesitan usar OpenLiteSpeed, sino que existe una licencia comercial gratis, puedes ver más al respecto desde aquí.
Nginx por otro lado sigue evolucionando, y seguirá siendo por muchos años más uno de nuestros servidores web preferidos, es una lástima que todavía no tenga soporte oficial para paneles de control como cPanel, algo que haría que llegara a muchísimos más desarrolladores.
¿Esto significa que no debería seguir usando Apache? No, para nada, si te gusta y te sientes cómodo con Apache puedes seguir usándolo, es parte del stack clásico LAMP y se adapta a casi cualquier entorno, tiene muchísimas cosas buenas, sin duda alguna. Sólo que si buscas rendimiento y seguridad para sitios con tráfico medio a alto, o si te preocupa ganar cada milisegundo para agradarle más a Google, quizás no sea la mejor elección.
PD: ¿Qué hay de ti? ¿Cuál es tu servidor web favorito y por qué?