Introducción
El rol principal de un servidor web es servir páginas web para un sitio web. Una página web puede renderizarse a partir de un solo archivo HTML o una combinación compleja de recursos que se ensamblan. Si deseas alojar tu aplicación web en internet, en muchos casos necesitarás un servidor web.
Uno de los usos más comunes de los servidores web es servir los archivos necesarios para renderizar un sitio web en un navegador. Cuando visitas http://www.digitalocean.com
, comienzas ingresando una URL que inicia una solicitud a través de internet. Esta solicitud pasa a través de múltiples capas, una o más de las cuales será un servidor web. Este servidor web genera una respuesta a tu solicitud, que en este caso es el sitio web de DigitalOcean, específicamente la página de inicio. Idealmente, esto ocurre rápidamente y con disponibilidad las 24 horas del día, los 7 días de la semana.
Mientras que cualquier visitante de la página de inicio de DigitalOcean la experimentará como una sola página web, en realidad la mayoría de las páginas web modernas hoy en día son una combinación de muchos recursos. Los servidores web actúan como intermediarios entre el backend y el frontend, sirviendo recursos como archivos HTML y CSS hasta datos JSON, todo generado dinámicamente al vuelo o servido estáticamente. Si planeas trabajar con sitios web o aplicaciones en línea de alguna manera, es extremadamente útil familiarizarte con los fundamentos de qué es un servidor web y cómo funciona.
Mientras que el término “servidor web” puede referirse tanto al software en sí mismo como al hardware en el que existe, este artículo se refiere específicamente al software de servidor web. Para más detalles sobre esta diferencia, consulta nuestra introducción a los servidores en la nube.
Casos de Uso Comunes
Un servidor web maneja solicitudes en Internet a través de los protocolos HTTP y HTTPS, y también se llama servidor HTTP. Un servidor web se distingue de otros tipos de servidores en que se especializa en manejar estas solicitudes HTTP y HTTPS, diferenciándose de los servidores de aplicaciones (por ejemplo, Gunicorn) y los servidores para otros protocolos (es decir, WSGI). Estos otros servidores funcionan como intermediarios para lenguajes de programación de backend a través de bibliotecas externas, lo cual es un nivel de abstracción diferente al de los servidores web.
Aquí hay algunas tareas comunes manejadas por los servidores web:
- Sirve archivos HTML, CSS y JavaScript.
- Sirve imágenes y videos.
- Maneja mensajes de error HTTP.
- Maneja solicitudes de usuarios, a menudo de manera concurrente.
- Dirige la coincidencia y reescritura de URL.
- Procesa y sirve contenido dinámico.
- Comprime el contenido para optimizar el uso y la velocidad de los datos.
- Permite la caché del navegador para tu contenido estático.
En términos prácticos, aquí hay algunos proyectos personales que implicarían un servidor web:
- Quieres hacer una página web.
- Quieres desarrollar una aplicación que se conecte a internet.
Esta lista no es en absoluto exhaustiva, y un servidor web no está estrictamente limitado en los tipos de datos que puede servir a un usuario final. Por ejemplo, un servidor web que atiende solicitudes de API web a menudo responde con datos en un formato como JSON.
Objetivos de un Servidor Web
Los servidores web satisfacen una audiencia con expectativas de velocidad, disponibilidad, fiabilidad y más. Tienen un propósito compartido de servir contenido en internet, y para ser considerado una solución viable de servidor web, deben tenerse en cuenta los siguientes aspectos:
- Uptime: Esto se refiere al tiempo que un servidor web está en línea y operativo. Las páginas web necesitan estar en línea en todo momento para servir a los usuarios, por lo que un alto uptime es el objetivo. Esto también se traduce en estabilidad y predictibilidad. Cuando un usuario ingresa una URL o hace clic en un enlace a tu página web, la página esperada debe cargarse siempre y en cualquier momento. Las únicas excepciones deben ser tiempos de inactividad planeados para actualizaciones o mantenimiento. Un servidor web que es inestable o se cae al azar afecta adversamente la experiencia de tus usuarios.
- Velocidad: Tus páginas web deben cargarse lo más rápido posible. Los usuarios quieren que sus solicitudes se cumplan de inmediato, de lo contrario riesgas perderlos. En una página web de carga lenta, incluso si el usuario espera a través de la primera carga, cada carga larga posterior disminuirá exponencialmente su voluntad de quedarse o visitar de nuevo.
- Concurrencia: Esto se refiere al manejo de múltiples solicitudes que llegan al mismo tiempo. Tener demasiadas personas intentando visitar tu sitio web a la vez parece algo bueno, pero esto se convierte en un problema real cuando los tiempos de carga se reducen a un crawl y todo tu servidor se cae. Tu servidor físico o virtual solo tiene recursos limitados, como RAM y potencia de cómputo de CPU, y los servidores web deben utilizar estos recursos de manera eficiente.
- Escalabilidad: La escalabilidad se refiere a hacer que tus servidores existentes sean más potentes a través de la escalado vertical, o agregar más servidores a tu configuración a través del escalado horizontal. A medida que creces tu audiencia, podrías llegar a un punto en el que necesites más de uno o dos pequeños servidores web.
- Facilidad de configuración: Llevar a cabo un proyecto de manera rápida es clave para la iteración de tu proyecto. Un proceso de instalación sencillo y repetible es importante para el primer servidor web que configures, y para los múltiples servidores web posteriores cuando escalas.
- Documentación: Los servidores web son complejos. Las configuraciones más comunes te pondrán en marcha rápidamente, pero tus necesidades crecerán con el tiempo. A menudo necesitarás características que no se utilizan tan comúnmente. Cuando ese momento llegue, una buena documentación es esencial para crear soluciones personalizadas para tus necesidades.
- Soporte de desarrolladores: Si los desarrolladores principales no están comprometidos con su propio proyecto, usted no debería comprometer su proyecto con el de ellos. Esto incluye tanto los planes de soporte a largo plazo para su software, como el soporte a corto plazo inmediato que proporcionan en forma de correcciones de errores y parches.
- Soporte de la comunidad: Un equipo de desarrollo central manejará la mayor parte del trabajo pesado, pero una comunidad próspera contribuye a llenar los vacíos. Con proyectos de código abierto, esto puede significar contribuciones a la base de código real, pero una comunidad fuerte también responderá a sus preguntas y le ayudará con sus problemas específicos.
Mientras que los servidores web pueden ofrecer diferentes soluciones, las soluciones que ofrecen parten de intentos para abordar estos mismos problemas. Estos problemas mismos evolucionan con el tiempo junto con las necesidades y expectativas del usuario final, haciendo de esta una lista viva y en constante evolución.
Selección de una Solución de Servidor Web
Los servidores web de código abierto más populares actualmente son Apache y Nginx.
Apache fue el primero, y fue construido en una época cuando era común que múltiples sitios web con sus propios archivos de configuración individuales existieran en un solo servidor web. Nginx llegó después de Apache, en una época cuando las necesidades cambiaron de servir múltiples sitios web desde un servidor, hacia servir un sitio web desde un servidor de manera extremadamente eficiente bajo carga.
Mientras que los servidores web comparten los mismos objetivos y problemas, la interpretación y la implementación de cada solución serán diferentes. Las respuestas exactas a estos problemas dan forma a la identidad de cualquier solución de servidor web dada. Se destacan Nginx y Apache aquí debido a su ubiquidad, pero cualquier solución de servidor web tendrá opiniones. Al seleccionar un servidor web, es importante tener en cuenta tus propias necesidades para tu proyecto específico. De esa manera, incluso si el panorama de las ofertas de servidores web cambia, tu método de evaluación se mantiene firme basado en tus propios requisitos.
Aquí hay algunos diferenciadores clave en cómo los servidores web intentan lograr los objetivos de un servidor web:
Estructura de Archivos de Configuración
Los servidores web almacenan sus ajustes en archivos de configuración. Puedes personalizar tus servidores web editando estos archivos. La forma en que se almacenan y organizan los archivos de configuración es una cuestión estructural y opinada que divide a los productos de servidores web.
La principal división está entre la centralización y la descentralización. Los archivos de configuración descentralizados permiten un nivel de control granular a nivel de sistema de archivos, lo cual surge de la necesidad de alojar varios sitios web en un solo servidor. Las configuraciones centralizadas no se centran en alojar múltiples sitios web en un solo servidor, sino que se enfocan en servir eficientemente un solo sitio web. Estas configuraciones dependen del emparejamiento de patrones URI, que es el emparejamiento de URLs con nombres de archivos y otros identificadores únicos, en lugar de depender del emparejamiento contra la estructura de directorios de un servidor web.
Los archivos .htaccess
de Apache facilitan una configuración descentralizada como una característica, y cada decisión de diseño fluye de este enfoque en el sistema de archivos con un nivel de control granular. Nginx no tiene el mismo enfoque en el sistema de archivos y se centra en el emparejamiento de patrones URI y una configuración centralizada.
Manejo de Concurrencia
Los servidores físicos y virtuales en los que ejecutas servidores web tienen recursos limitados, como RAM y procesamiento de CPU. La forma en que tu servidor web gestiona fundamentalmente sus solicitudes tendrá el impacto más grande en el uso eficiente de tus recursos. Una sola solicitud puede generar todo un proceso por solicitud, o puede ser manejada en una base impulsada por eventos. La capacidad de tu servidor web para manejar múltiples solicitudes simultáneas de manera eficiente está vinculada a decisiones de diseño fundamentales.
Apache maneja las solicitudes generando procesos, lo que consume recursos a una tasa que puede convertirse en un problema bajo carga. El sistema de manejo de eventos de Nginx utiliza menos recursos y puede ser más eficiente bajo carga.
Servir Contenido Estático
Además de las páginas web, los servidores web reciben solicitudes para otros recursos como imágenes, videos, archivos CSS y archivos JavaScript. Dado que estos elementos siempre son los mismos independientemente de quién los solicite, este tipo de contenido se denomina estático. Muchas veces, una página web en sí misma es solo un archivo HTML que no se personaliza para la persona que lo solicita, y también se trata como contenido estático. Los servidores web también pueden comprimir este contenido estático para mejorar los tiempos de carga.
Nginx se destaca en la entrega de contenido estático gracias a su manejo de solicitudes basado en eventos. Apache también puede servir contenido estático, pero en la mayoría de las configuraciones, no a la misma velocidad y eficiencia bajo carga que Nginx.
Servir Contenido Dinámico
Cuando el contenido se cambia, procesa y personaliza dependiendo de quién lo solicita, se denomina dinámico. Por ejemplo, después de iniciar sesión en un sitio web, a menudo el sitio web llenará dinámicamente tu nombre de usuario en la barra de navegación superior. El contenido dinámico agrega complejidad adicional porque obliga al servidor web a manejar muchas solicitudes de manera única en el momento en que las recibe. El contenido personalizado por solicitud no puede ser servido a todos y no puede ser almacenado en caché de manera universal.
Procesar el contenido dinámico internamente elimina una capa extra de abstracción que normalmente requeriría pasar la solicitud a una biblioteca externa. Apache implementa procesamiento de contenido dinámico de forma nativa, con soluciones de pila populares como LAMP (Linux, Apache, MySQL, PHP). Nginx es más agnóstico a los lenguajes pero requiere bibliotecas externas como PHP-FPM para actuar como una solución similar para casos de uso como la pila LAMP.
Capacidad de Proxy Inverso
Un proxy inverso se sitúa delante de un servidor web tradicional, convirtiéndose en un servidor intermedio que enruta el tráfico de solicitudes HTTP a los servidores web que están detrás de él. Un proxy inverso se convierte en la puerta de enlace que dirige el tráfico entre los servidores web y la gran internet, y a menudo es la capa que se comunica directamente con un firewall. Mientras que la mayoría de los servidores web tienen capacidad de proxy inverso, Nginx fue construido y optimizado desde cero para ser un servidor de proxy inverso robusto.
La importancia de Nginx en el uso real del mundo depende en gran medida de sus características y eficiencia como proxy inverso. Muchas configuraciones de servidores colocan múltiples servidores web tradicionales detrás de un proxy inverso de Nginx, utilizando Nginx para determinar a qué servidor web enviar la solicitud basándose en la carga o la configuración de reglas. Este papel intermedio le permite incluso emparejar con Apache en algunas configuraciones, sentándose como un proxy inverso delante de un servidor web tradicional de Apache.
Ecosistema de Soporte
Nginx y Apache cuentan con un fuerte apoyo de sus respectivos equipos de desarrollo y comunidades. Siendo los servidores web de código abierto más populares, los recursos de aprendizaje son abundantes. Apache es apoyado por Apache, una organización sin ánimo de lucro, y siempre será gratuito para usar. El núcleo de Nginx es de código abierto, pero las características deseables están bloqueadas detrás de su oferta de producto Nginx Plus, que incluye características como comprobaciones de salud de上游, persistencia de sesión y monitoreo avanzado.
Alternativas a los Servidores Web Tradicionales
Si deseas un servidor listo en todo momento para responder a una solicitud HTTP entrante, entonces un servidor web es la herramienta ideal para esta tarea. A medida que te alejas de enfocarte en atender solicitudes HTTP, los servidores web se vuelven menos una solución ideal. Esto es especialmente cierto para las características auxiliares que proporcionan los servidores web. Por ejemplo, características como el almacenamiento en caché pueden ser manejadas más eficientemente a los niveles de proxy inverso o CDN, dependiendo de la configuración.
Además, a medida que los desarrolladores han cambiado sus prioridades dedicando recursos de desarrollo a la gestión de servidores web, han surgido soluciones como serverless, CMS sin cabeza y Jamstack. Estas soluciones no requieren un servidor web autoalojado, en su lugar abstraen la capa del servidor web en servicios externos. Para desarrolladores que no requieren un control granular o avanzado de la capa del servidor web, el tiempo de desarrollo puede centrarse en otros aspectos. Para más información, consulta este artículo sobre Jamstack con CMS sin cabeza o implementación de Jamstack de pila completa con la Plataforma de Aplicaciones de DigitalOcean.
Conclusión
En este artículo, has recorrido un básico manual sobre qué son los servidores web, cómo se utilizan y los problemas que intentan resolver. Equipado con esta knowledge, has sumergido en el panorama actual de soluciones de servidores web, y has aplicado tus conocimientos para encontrar la solución que se adapta a tus necesidades específicas. Para aprender más sobre cómo configurar y utilizar un servidor web, consulta el resto de nuestra serie de currículos en la nube sobre servidores web.
Recursos Adicionales
Tutoriales:
- Cómo Instalar Apache: Instrucciones paso a paso para configurar tu primer servidor Apache. Esta solución destaca por su configuración descentralizada que permite un control granular, y el manejo interno de páginas web dinámicas con conexiones a lenguajes de programación populares como PHP.
- Cómo Instalar Nginx: Instrucciones paso a paso para configurar tu primer servidor Nginx. Esta solución destaca por su configuración centralizada, la entrega de activos estáticos, el desempeño como proxy inverso y el manejo de un tráfico de alta concurrencia.
- Apache vs Nginx: Consideraciones Prácticas: Una mirada más profunda a los dos grandes jugadores en el panorama de soluciones de servidores web.
Productos de DigitalOcean:
- Droplets de DigitalOcean: Servidores privados virtuales para probar y desplegar servidores web.
- Funciones de DigitalOcean: Solución serverless que puede ser una alternativa a los servidores privados virtuales. Salta el mantenimiento de los servidores, enfócate en tu código de aplicación.
Source:
https://www.digitalocean.com/community/conceptual_articles/web-servers-introduction