Introducción a los servidores web

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á 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 sucede rápidamente y con disponibilidad 24/7.

Aunque cualquier visitante a 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, 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 de alguna manera, es extremadamente útil familiarizarse con los conceptos básicos de lo que es un servidor web y cómo funciona.

Aunque 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 de 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 las solicitudes de los usuarios, a menudo de forma concurrente.
  • Dirige la coincidencia y 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 tu 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 atiende solicitudes de API web a menudo responde con datos en un formato como JSON.

Objetivos de un Servidor Web

Los servidores web están dirigidos a una audiencia con expectativas de velocidad, disponibilidad, fiabilidad 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:

  • Uptime: Esto se refiere al tiempo que un servidor web está en línea y operativo. Los sitios web deben estar en línea en todo momento para atender a los usuarios, por lo que un alto tiempo de actividad es el objetivo. Esto también se traduce en estabilidad y previsibilidad. Cuando un usuario ingresa una URL o hace clic en un enlace hacia tu sitio web, la página esperada debería cargarse cada vez y en cualquier momento dado. Las únicas excepciones deberían ser los tiempos de inactividad planificados para actualizaciones o mantenimiento. Un servidor web que es defectuoso o se bloquea en momentos aleatorios afecta negativamente la experiencia de tus usuarios.
  • Velocidad: Tus páginas web deben cargar lo más rápido posible. Los usuarios desean que sus solicitudes se cumplan de inmediato, de lo contrario corres el riesgo de perderlos. En una página web de carga lenta, incluso si el usuario aguanta la primera carga, cada carga larga posterior disminuirá exponencialmente su voluntad de quedarse o volver a visitar.
  • Concurrencia: Esto se refiere al manejo de múltiples solicitudes que llegan al mismo tiempo. Tener demasiadas personas intentando visitar tu sitio web al mismo tiempo parece algo bueno, pero esto se convierte en un problema real cuando los tiempos de carga se ralentizan hasta detenerse y todo el servidor se bloquea. Tu servidor físico o virtual solo tiene ciertos recursos como la RAM y la potencia de cálculo de la 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 escalabilidad vertical, o agregar más servidores a tu configuración mediante la escalabilidad horizontal. A medida que creces tu audiencia, puedes alcanzar 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 harán avanzar 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 del desarrollador: 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 de soporte a largo plazo para su software, junto con el soporte inmediato a corto plazo que brindan 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 base, 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 se derivan 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 un momento en 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 alejaron de servir múltiples sitios web desde un solo servidor, y en cambio se dirigieron 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 e implementación de cada solución será diferente. Las respuestas exactas a estos problemas dan forma a la identidad de cualquier solución de servidor web. 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 ofertas de servidores web cambia, su método de evaluación se mantiene fundamentado en sus propios requisitos.

Aquí hay algunos diferenciadores clave en cómo los servidores web intentan lograr los objetivos de un servidor web:

Estructura de los archivos de configuración

Los servidores web almacenan sus configuraciones 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 y subjetivo que divide los productos de servidores web.

La principal división es entre centralización y descentralización. Los archivos de configuración descentralizados permiten un nivel granular de control a nivel del 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 de URI, que es la coincidencia de URLs con nombres de archivo y otros identificadores únicos, en lugar de basarse en la coincidencia con 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 a partir de este enfoque en el sistema de archivos con un nivel granular de control. Nginx no tiene el mismo enfoque en el sistema de archivos y se centra en la coincidencia de patrones de URI y una configuración centralizada.

Manejo de la concurrencia

Los servidores físicos y virtuales en los que ejecutas servidores web tienen recursos limitados como RAM y procesamiento de CPU. Cómo gestiona fundamentalmente su servidor web sus solicitudes tendrá el mayor impacto en el uso eficiente de sus recursos. Una sola solicitud puede generar un proceso completo por solicitud, o puede ser manejada de manera basada en eventos. La capacidad de su 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 de 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. Muchas veces 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 destaca en la entrega 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.

Servicio de Contenido Dinámico

Cuando el contenido se modifica, procesa y personaliza dependiendo de quién lo solicite, se le llama contenido dinámico. Por ejemplo, después de iniciar sesión en un sitio web, a menudo el sitio web completará dinámicamente su 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 ser almacenado en caché universalmente.

Procesar contenido dinámico internamente elimina una capa adicional de abstracción 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 independiente del 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 servidor 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 según la carga o la configuración de reglas. Este papel intermedio le permite incluso emparejarse con Apache en algunas configuraciones, actuando como un proxy inverso frente a un servidor web Apache tradicional.

Ecossistema de soporte

Tanto Nginx como Apache cuentan con un fuerte 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 es respaldado por la Apache Software Foundation, 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 características como comprobaciones 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 logra esta tarea de la mejor manera. A medida que te alejas más de enfocarte en servir solicitudes HTTP, los servidores web se vuelven menos de 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 al dedicar recursos de desarrollo a administrar servidores web, han surgido soluciones como serverless, CMS sin cabeza y Jamstack en respuesta. Estas soluciones no requieren un servidor web auto alojado, en su lugar abstraen la capa del servidor web hacia 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 sobre 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 aprender más sobre cómo configurar y usar un servidor web, consulta el resto de nuestra serie de Currículo 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 sobresale con una configuración descentralizada para un control granular y el manejo interno de páginas web dinámicas con ganchos en lenguajes de programación populares como PHP.
  • Cómo Instalar Nginx: Instrucciones paso a paso para configurar tu primer servidor Nginx. Esta solución sobresale con una configuración centralizada, servir activos estáticos, actuar como un proxy inverso y manejar un 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 privados virtuales para que puedas probar e implementar servidores web.
  • Funciones de DigitalOcean: Solución sin servidor que puede ser una alternativa a los servidores privados virtuales. Omite el mantenimiento de los servidores y concéntrate en el código de tu aplicación.

Source:
https://www.digitalocean.com/community/conceptual_articles/introduction-to-web-servers