Introducción
A web server’s primary role is to serve web pages for a website. A web page can be rendered from a single HTML file, or a complex assortment of resources fitted together. If you want to host your web application on the internet, in many cases you will need a web server.
Uno de los casos de uso más comunes para los servidores web es servir 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 por múltiples capas, una o más de las cuales serán 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.
Si bien 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 a datos JSON, todos generados dinámicamente sobre la marcha o servidos estáticamente. Si tienes la intención de trabajar con sitios web o aplicaciones en línea en cualquier capacidad, es extremadamente útil familiarizarse con los conceptos básicos de lo que es un servidor web y cómo funciona.
Si bien el término “servidor web” puede referirse tanto al software en sí como al hardware en el que existe, este artículo se refiere específicamente al software del servidor web. Para obtener más detalles sobre esta diferencia, consulta nuestra introducción a los servidores en la nube.
Casos de Uso Comunes
A web server handles requests on the internet through HTTP and HTTPS protocol, and is also called an HTTP server. A web server is distinct from other types of servers in that it specializes in handling these HTTP and HTTPS requests, differentiating itself from application servers (e.g. Gunicorn) and servers for other protocols (i.e. WSGI). These other servers work as intermediaries for backend programming languages through external libraries, which is a different level of abstraction than web servers.
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 usuario, frecuentemente de manera concurrente.
- Dirige el emparejamiento y la reescritura de URL.
- Procesa y sirve contenido dinámico.
- Comprime contenido para un uso de datos y velocidad optimizados.
- Permite el almacenamiento en caché del navegador para su contenido estático.
En términos prácticos, aquí hay algunos proyectos personales que implicarían un servidor web:
- Quieres hacer un sitio web.
- Quieres hacer una aplicación que se conecte a internet.
Esta lista no es 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 sirve solicitudes de API web a menudo responde con datos en un formato como JSON.
Objetivos de un Servidor Web
Los servidores web se dirigen a una audiencia con expectativas de velocidad, disponibilidad, confiabilidad y más. Tienen un propósito compartido de servir contenido en internet, y para considerarse una solución de servidor web viable, se deben tener en cuenta los siguientes aspectos:
- Tiempo de actividad: Esto se refiere al tiempo en que un servidor web está en línea y operativo. Los sitios web deben estar en línea todo el tiempo para servir a los usuarios, por lo que un alto tiempo de actividad 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 su sitio web, la página esperada debe cargarse cada vez y en cualquier momento. Las únicas excepciones deben ser los tiempos de inactividad planificados para actualizaciones o mantenimiento. Un servidor web que tenga errores o se bloquee en momentos aleatorios afecta negativamente la experiencia de sus usuarios.
- Velocidad: Sus páginas web deben cargarse lo más rápido posible. Los usuarios desean que su solicitud se cumpla de inmediato, de lo contrario corre el riesgo de perderlos. En una página web que carga lentamente, incluso si el usuario espera durante la primera carga, cada carga larga posterior disminuirá exponencialmente su voluntad de quedarse o visitar nuevamente.
- Concurrencia: Esto se refiere al manejo de múltiples solicitudes que llegan al mismo tiempo. Tener demasiadas personas intentando visitar su sitio web al mismo tiempo parece ser algo bueno, pero esto se convierte en un problema real cuando los tiempos de carga se ralentizan y todo el servidor se bloquea. Su servidor físico o virtual solo tiene tantos recursos, como memoria RAM y potencia de cálculo de la CPU, y los servidores web deben utilizar estos recursos de manera eficiente.
- Escalabilidad: La escalabilidad se refiere tanto a hacer que tus servidores existentes sean más potentes mediante la escalabilidad vertical, como a agregar más servidores a tu configuración mediante la escalabilidad horizontal. A medida que creces tu audiencia, puedes llegar a un punto en el que necesites más de uno o dos pequeños servidores web.
- Facilidad de configuración: Poner en marcha un proyecto rápidamente 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 funciones que no se utilizan tan comúnmente. Cuando llegue ese momento, una buena documentación es esencial para crear soluciones personalizadas para tus necesidades.
- Soporte para desarrolladores: Si los desarrolladores principales no están comprometidos con su propio proyecto, no deberías comprometer tu proyecto con el de ellos. Esto incluye tanto planes para el soporte a largo plazo de su software, como el soporte inmediato a corto plazo 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 al propio código, pero una comunidad sólida también responderá tus preguntas y te ayudará con tus problemas específicos.
Si bien los servidores web pueden ofrecer diferentes soluciones, las soluciones que ofrecen surgen de intentos de abordar los mismos problemas. Estos problemas mismos evolucionan con el tiempo junto con las necesidades y expectativas del usuario final, lo que hace que esta sea 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 se construyó en una época en la que 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 un momento en que las necesidades se alejaban de servir múltiples sitios web desde un solo servidor, y en cambio se dirigían a servir un sitio web desde un servidor de manera extremadamente eficiente bajo carga.
Aunque 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. Nginx y Apache se destacan aquí debido a su ubicuidad, pero cualquier solución de servidor web será tendenciosa. Al seleccionar un servidor web, es importante tener en cuenta sus propias necesidades para su proyecto específico. De esa manera, incluso si el panorama de las ofertas de servidores web cambia, su método de evaluación se mantendrá fundamentado en sus propios requisitos.
Aquí hay algunas diferencias 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. El almacenamiento y la organización de los archivos de configuración es un problema estructural con opiniones divididas que separa los productos de servidores web.
La principal división es entre centralización y descentralización. Los archivos de configuración descentralizados permiten un control granular a nivel de sistema de archivos, lo que surge de la necesidad de alojar múltiples sitios web en un servidor. Las configuraciones centralizadas no se centran en alojar múltiples sitios web en un servidor, y en su lugar se centran en servir eficientemente un solo sitio web. Estas configuraciones se basan en la coincidencia de patrones URI, que es la coincidencia de URLs con nombres de archivo y otros identificadores únicos, en lugar de depender de la coincidencia con la estructura de directorios de un servidor web.
Los archivos .htaccess
de Apache facilitan una configuración descentralizada como característica, y cada decisión de diseño fluye desde este enfoque en el sistema de archivos con un control granular. Nginx no tiene el mismo enfoque en el sistema de archivos y se centra en la coincidencia de patrones URI y una configuración centralizada.
Manejo de Concurrency
Los servidores físicos y virtuales en los que ejecutas servidores web tienen recursos limitados como RAM y capacidad de procesamiento de CPU. La forma en que tu servidor web gestiona fundamentalmente sus solicitudes tendrá el mayor impacto en la utilización eficiente de tus recursos. Una única solicitud puede generar un proceso completo por solicitud, o puede ser manejada de manera basada en 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 un ritmo 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 son siempre los mismos independientemente de quién los solicite, este tipo de contenido se denomina estático. A menudo, una página web en sí misma es solo un archivo HTML que no está personalizado 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 obtener mejores tiempos de carga.
Nginx sobresale en el servicio de contenido estático debido 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 en comparación con Nginx.
Sirviendo Contenido Dinámico
Cuando el contenido se cambia, procesa y personaliza según quien lo solicita, se denomina dinámico. Por ejemplo, después de iniciar sesión en un sitio web, a menudo el sitio web poblara dinámicamente tu nombre de usuario en la barra de navegación superior. El contenido dinámico agrega una complejidad adicional porque obliga al servidor web a manejar muchas solicitudes de manera única en el momento en que las recibe. El contenido adaptado por solicitud no puede servirse a todos y no puede almacenarse en caché de forma universal.
Procesar contenido dinámico internamente elimina una capa de abstracción adicional que normalmente requeriría pasar la solicitud a una biblioteca externa. Apache implementa nativamente el procesamiento de contenido dinámico, con pilas de soluciones populares como LAMP (Linux, Apache, MySQL, PHP). Nginx es más agnóstico en cuanto a lenguaje 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
A reverse proxy sits in front of a traditional web server, becoming an intermediary server that routes HTTP request traffic to web servers behind it. A reverse proxy becomes the gateway that directs traffic between web servers and the internet at large, and often is the layer that directly interfaces with a firewall. While most web servers have reverse proxy capability, Nginx was built and optimized from the ground up to be a robust reverse proxy server.
La importancia de Nginx en el uso del mundo real depende en gran medida de sus características de proxy inverso y eficiencia. Muchas configuraciones de servidores colocan múltiples servidores web tradicionales detrás de un proxy inverso Nginx, utilizando Nginx para determinar a qué servidor web enviar la solicitud según la carga o la configuración de reglas. Este papel intermedio le permite incluso asociarse con Apache en algunas configuraciones, actuando como un proxy inverso frente a un servidor web Apache tradicional.
Ecosistema de soporte
Tanto Nginx como Apache cuentan con un sólido apoyo de sus respectivos equipos de desarrollo y comunidad. Siendo los servidores web de código abierto más populares, los recursos de aprendizaje son abundantes. Apache cuenta con el respaldo de la Apache, una organización sin fines de lucro, y siempre será gratuito de 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 con funciones como verificaciones de salud de upstream, persistencia de sesiones y monitoreo avanzado.
Alternativas al servidor web tradicional
Si deseas un servidor que esté listo en todo momento para responder a una solicitud HTTP entrante, entonces un servidor web cumple mejor esta tarea. A medida que te alejas más de enfocarte en servir solicitudes HTTP, los servidores web se volverán 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 de manera más eficiente en los niveles de proxy inverso o CDN, dependiendo de la configuración.
Además, a medida que los desarrolladores han cambiado sus prioridades en dedicar recursos de desarrollo para administrar servidores web, han surgido soluciones como sin servidor, CMS sin cabeza y Jamstack en respuesta. Estas soluciones no requieren un servidor web autohospedado, en lugar de eso abstraen la capa del servidor web a servicios externos. Para los 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 obtener más información, consulta este artículo sobre Jamstack con CMS sin cabeza o implementando Jamstack de pila completa con la Plataforma de Aplicaciones de DigitalOcean.
Conclusión
En este artículo, has pasado por una introducción básica de qué son los servidores web, cómo se utilizan y los problemas que intentan resolver. Equipado con este conocimiento, te adentraste en el panorama actual de las soluciones de servidores web y aplicaste tu conocimiento para encontrar la solución que se adapta específicamente a tus necesidades. Para obtener más información sobre cómo configurar y usar un servidor web, consulta el resto de nuestra serie de Currículum 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 para 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, servir activos estáticos, actuar como un proxy inverso y manejar el tráfico de alta concurrencia.
- Apache vs Nginx: Consideraciones Prácticas: Una mirada más profunda a los dos principales actores en el panorama de soluciones de servidores web.
Productos de DigitalOcean:
- DigitalOcean Droplets: Servidores virtuales privados para que puedas probar e implementar servidores web.
- Funciones de DigitalOcean: Solución sin servidor que puede ser una alternativa a los servidores virtuales privados. Omite el mantenimiento de servidores, concéntrate en el código de tu aplicación.
Source:
https://www.digitalocean.com/community/conceptual-articles/introduction-to-web-servers