Servidor Web

Es uno de los componentes que potencian internet día a día. Sin él no podríamos acceder a las redes sociales, enviar un formulario web, o directamente cargar cualquier página web. Hablamos del llamado servidor web.

Desde este artículo intentaremos repasar brevemente la historia de los servidores web, adentrarnos en el concepto de qué es un servidor web, su funcionamiento, cuáles son los más populares y formas de instalarlo en Windows y Linux.

Orígenes de los servidores web

A principio de la década de 1980, un científico en computación de origen británico llamado Timothy Berners-Lee que trabajaba en el CERN en ese entonces, vio un problema que se tenía a la hora de compartir información entre los propios científicos

Entonces se le ocurrió una idea que cambió para siempre el mundo de la computación, Internet en particular y a toda nuestra cultura, y que aun hoy mas de tres décadas después esa idea determina como usamos Internet a diario.

La idea comenzó a gestarse al principio de la década sin embargo se postergó algunos años ya que Berners-Lee abandonó el CERN al poco tiempo para recién volver varios años más tarde, como la organización seguía teniendo el mismo problema se volvió a plantear la idea original que mas tarde se conoció como el hipertexto.

La idea en realidad estaba formada por varias partes, la primera por un lenguaje de marcado que posteriormente se denominó como HTML abreviatura de HyperText Markup Language que permite definir la estructura del documento y colocar la información organizada y estructurada.

En segundo lugar se necesitaba un servicio que permitiera colocar públicamente estos documentos escritos en HTML, para esto desarrollaron el primer Servidor Web al que llamó HTTPD que corresponde a HyperText Transfer Protocol Daemon.

Si bien en este articulo hablaremos sobre este servicio también hay que entender que el desafío no terminó allí porque aparte del lenguaje y el servicio para publicarlo también necesitaron desarrollar otras herramientas fundamentales.

Como por ejemplo la aplicación cliente para acceder a esos documentos que hoy conocemos por Navegadores Web y el protocolo que permite al navegador comunicarse con el servidor, este protocolo se denominó  HTTP, las iniciales de HyperText Transfer Protocol.

¿Qué es un servidor web?

Un Servidor Web es un servicio que se ejecuta en un servidor remoto y tiene como fin servir contenido, normalmente páginas web, imágenes y cualquier otro tipo de archivos a otras computadoras y funciona bajo el protocolo HTTP aunque originalmente fue diseñado únicamente para servir páginas web basadas en HTML hoy día hace mucho más que eso.

Luego con el correr de los años y su evolución se le dio otros usos para utilizarlo como herramienta de aplicaciones basadas en en otros formatos como xml y json, no solo HTML original

Los servidores web en la actualidad son una evolución del primer servidor web desarrollado en el CERN httpd (HyperText Transfer Protocol daemon), con el tiempo se han agregado funciones, actualizado los estándares y han evolucionado sin embargo el concepto y el funcionamiento básico es exactamente el mismo.

Con el correr de los años Internet a evolucionado mucho aunque aún en el dia de hoy sigue funcionando con el mismo concepto que dio origen a la web hace casi 30 años ya.

Funcionamiento de servidores web

Para poder ver una página web necesitamos un cliente web que llamamos navegador actualmente existen varios como Chrome, Firefox, Edge/Internet Explorer, Safari entre muchos otros, estos solo son los más populares.

Cuando utilizamos un navegador y abrimos una dirección web cualquiera estamos usando el protocolo llamado HTTP y esto es la base de toda la web, es el protocolo que permite transferir el contenido html, images, video etc desde el servidor web hasta el cliente.

Cuando escribimos la dirección web, si no le especificamos que sea http adelante la dirección el navegador asume que queremos usar este protocolo porque en un principio diseñados para usar HTTP, sin embargo los navegadores modernos permiten utilizarlo mediante varios protocolos diferentes.

Cuando nosotros solicitamos un página desde nuestro navegador lo hacemos a otra computadora que está en otra parte y que se denomina servidor, el cual que está ejecutando un servicio que se llama genéricamente Servidor Web y es la que nos devuelve la página que estamos buscando.

Un servidor web recibe peticiones bajo el protocolo HTTP proveniente de un cliente, normalmente un navegador web aunque también de cualquier cliente que soporte HTTP, estas solicitudes pueden ser unidireccionales o bidireccionales, síncronas o asíncronas todas permiten enviar y/o recibir información entre el cliente y el servidor.

Dentro del protocolo HTTP se incluyeron diversión tipos de métodos como las peticiones GET, POST, PUT, DELETE, PATCH entre otras que son las que permiten mantener una comunicación entre la aplicación cliente y el servidor web.

Todos los servidores sin importar el tipo son 100% compatibles con los estándares de HTTP y permiten los mismos métodos de peticiones que vimos más arriba, lo que hace que haya tantos tipos o marcas diferentes es que internamente trabajar de forma diferente.

Eso hace que haya diferencias sustanciales en el uso de recursos de memoria y CPU entre los diferentes tipos de servidores, de hecho algunos servidores nacieron como necesidad para resolver problemas de rendimiento de otros servidores anteriores.

Mas allá que todos sean compatibles con HTTP el modo en que los servidores web administren los procesos internos, es decir procesos hijo e hilos de ejecución es un punto crucial a la hora de elegir servidor, esto determinará el rendimiento final ,básicamente existen dos formas de abordar el procesamiento o multi-procesamiento:

  • Procesos hijos
  • Procesos hijos + Hilos de ejecución

En el modelo de Procesos Hijos se abren diferentes procesos en paralelo para repartir las peticiones entre ellos, el número de procesos depende de la configuración proporcionada, de los diferentes enfoques el que más recursos consume tanto de CPU como de memoria sin embargo tiene la ventaja es que se considera más seguro en ciertas circunstancias y para ciertos usos.

El segundo modelo combina Procesos Hijos con el uso de Hilos de ejecución, que son subprocesos en paralelo dentro del proceso hijo, esto hace que con un mismo proceso hijo se pueda atender mas peticiones en paralelo.

No necesariamente para cambiar de modelo debemos cambiar de servidor, por ejemplo en  Apache existen varias alternativas de diferentes módulos mpm como mpm-prefork, mpm-worker o mpm-event donde cada uno encara de forma diferente la administración de procesos hijo e hilos, abriendo un abanico de posibilidades de configuración para aprovechar mejor los recursos.

Por ejemplo mpm-prefork es el módulo por defecto de una instalación básica y trabaja solo con procesos hijos, tiene la ventaja de la seguridad y de una amplia compatibilidad de módulos aunque por contracara es el módulo mpm mas ineficiente.

El modelo aplicado por mpm-worker combina los procesos hijos con hilos de ejecución o threads mejorando sustancialmente el consumo de recursos aunque si se trata de un servidor con PHP implica el reemplazo de mod_php por defecto por php-fpm por tema de compatibilidad.

En el caso mpm-event es idéntico al de mpm-worker, la diferencia es el manejo de peticiones keep-alive sumamente importante para mantener conexiones abiertas por tiempo indefinido, por lo demas es identico a worker, mismas ventajas y desventajas

¿Cuál es el servidor web más usado?

lista que muestra cuàl es el servidor web más popular

Desde hace muchos años el servidor más usado es Apache que si bien desde hace algunos años viene perdiendo cuota de mercado actualmente ronda 40% que le alcanza para ser el primero sin embargo esa cuota de mercado está muy lejos del 70% que llegó a alcanzar en su punto más alto.

La pérdida de mercado se debe al surgimiento de opciones mas eficientes en cuanto a recursos, con el correr de los años surgieron serios competidos como Nginx y LiteSpeed, ademas un constante crecimiento de Microsoft Internet Information Services de la mano de la plataforma Azure

Por ejemplo para HostAdvice actualizado a Junio de 2019 Apache continua primero con poco mas del 37% del mercado y en segundo lugar Nginx con el 23.66%.

A pesar de no ser la opción más veloz ni eficiente Apache sigue primero gracias la gran mayoría de los programadores están familiarizados con el y con la sintaxis de htaccess, si bien Nginx ofrece las mismas posibilidades la sintaxis, esta es diferente y esta integrada en los archivos de configuración del propio servidor,

Para que tome los cambios hay que reiniciar el servicio mientras que en el famoso servidor HTTPD (Apache) los archivos de htaccess son independientes y los cambios son tomados de forma automática, lo cual simplifica la modificación de la configuración por parte del programador sin necesidad de un administrador del servidor

Sin embargo esta ventaja puede desaparecer, desde hace algunos meses cPanel, el panel de control de hosting mas conocido esta en fase de pruebas para soportar oficialmente Nginx tal como lo hace con LiteSpeed, es una incógnita aun como solucionara este tema sin embargo cuando lo haga seguramente la brecha no solo podría desaparecer sino que podría desplazar a Apache al segundo lugar.

El techo de IIS se debe principalmente a que se ejecuta solamente en sistemas Microsoft Windows por lo que su implementación siempre estará limitada a la cuota de este sistema operativo, en cuanto a la cuota de mercado LiteSpeed a pesar de ser uno de los mejores y mas veloces servidores web de la actualidad ademas de 100% compatible con htaccess, es baja debido a que a diferencia de Apache y Nginx, este es un servidor web de pago.

Igualmente las alternativas no terminan con estos servidores, existen muchos otros servidores alternativos que podemos conocer, para revisarlos puedes leer sobre los diferentes tipos de servidores web donde aparte de los ya nombrados también puedes conocer otras alternativas menos conocidas.

Servidor web vs servidor web local: Diferencias

Un servidor web se utiliza para publicar un sitio web o una aplicación a  todo el mundo en Internet mientras que un servidor local es utilizado para pruebas, entornos de desarrollo o aplicaciones de forma local ya sea en el propio PC o en la red local pero siempre teniendo un alcance mas limitado.

A nivel de software son igual, se utiliza el mismo servicio sin embargo a nivel de configuración difieren, en un servidor web normalmente esta asociado a uno o mas dominios mientras que un servidor local no, en su lugar se trabaja como localhost, con IP o con un dominio forzado por el archivo hosts del pc,que genera un dominio virtual limitado al propio pc.

Un servidor web en Internet ademas del propio servicio web esta rodeado por varios servicios adicionales como pueden FTP, correo electrónico, etc.

Instalación de Servidor Web

Instalar un servidor web en Linux es sumamente fácil, en todas las distribuciones encontremos varias alternativas directamente en los repositorios oficiales de cada distribución, en este caso tomaremos como ejemplo la instalación de Apache por ser de los mas utilizados y conocidos del mercado.

CentOS

El comando yum es el encargado de manejar la base de datos de los paquetes disponibles en la distribución y nos permite instalar cualquier paquete, en este caso Apache

Lo primero que debemos hacer es abrir una consola de sistema y con sudo ejecutar lo siguiente:

sudo yum install httpd
sudo systemctl start httpd.service
sudo systemctl enable httpd.service

Con systemctl iniciamos el servicio y configuramos se inicie automáticamente al arrancar el sistema, por ultimo configuramos el firewall para permitir los puertos 80 (http) y 443 (https)

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

Ubuntu

En el caso de Ubuntu y Debian el método es el mismo, solo que en el caso de ambas distribuciones para administrar los repositorios se utiliza APT, también desde una consola ejecutamos:

sudo apt install apache2

En este caso el servicio automáticamente se iniciara y configurara para que arranque al inicio, en el caso de Ubuntu que por defecto trae el firewall UFW activado, podemos hacer lo siguiente:

sudo ufw app list

Available applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH

Como vemos tenemos Apache Full entre las opciones ejecutamos:

sudo ufw app info "Apache Full"

Con esto ya queda autorizado en el firewall y listo para usar

Windows

En Windows las opciones que tenemos para servidores web es mas reducida porque en algunos casos no todos los servidores son compatibles con la plataforma.

En el caso de Windows no se cuenta con un repositorio tal como en Linux, aunque de igual manera podemos instalarlo fácilmente Apache mediante el instalador de XAMPP donde aparte del servidor web nos instalara también un entorno completo.

Una vez que bajamos el instalador lo ejecutamos con permisos de administrador y seguimos el menú, las ventanas de instalación son las típicas de cualquier aplicación Windows.

Si utilizamos Windows 10 es aun mas sencillo si tenemos BASH instado, con el podemos abrirlo una consola y utilizar las instrucciones de Ubuntu para tener Apache o cualquier paquete para Ubuntu instalado.

Resumen sobre servidores web

Los servidores web funcionan todos bajo el mismo protocolo HTTP lo cual lo hace compatibles para todos los navegadores web, sin embargo las diferencias están en cómo trabajan internamente, en cómo administran la memoria, los procesos hijos, los hilos de ejecución etc

Por eso es una decisión importante el servidor que se escoger para ser la base de la infraestructura web, hay servidores que son más eficientes que otros dependiendo del uso que se les va a dar. si necesitamos despachar gran cantidad de tráfico la forma más eficiente de hacerlo es con Nginx o LiteSpeed, ahora si necesitamos mayor cantidad de flexibilidad y opciones de módulos para expandir las funcionalidades Apache es mejor en ese sentido aunque no sea tan eficiente en el uso de memoria.

Conclusión

Como mencionamos antes todos los servidores trabajan bajo el estándar HTTP, se podría pensar que da lo mismo cual usemos sin embargo como vimos hay numerosas diferencias entre unos otros, por eso repasamos el funcionamiento interno y las ventajas de cada uno.

Debemos saber que a veces el servidor más utilizado no es siempre el más adecuado, debemos entender que cada servidor web tiene sus ventajas y sus desventajas, debemos elegir el mas indicado para nosotros en base a esta nuestras necesidades.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *