1. Contenidos
1.1 Función del servidor web
Un servidor web es un programa que permanece a la espera de peticiones realizadas por clientes, normalmente navegadores, y devuelve una respuesta HTTP. El término también puede utilizarse para referirse al equipo físico o virtual donde se ejecuta ese programa, pero en esta unidad nos referiremos principalmente al software.
Su función básica puede resumirse así:
Cliente Servidor web
(Navegador) (Apache, Nginx...)
| |
| ------- Petición HTTP -------> |
| |
| procesa petición |
| |
| <------ Respuesta HTTP ------- |
| |
Un servidor web puede realizar, entre otras, las siguientes tareas:
- Escuchar conexiones en uno o varios puertos, normalmente 80 para HTTP y 443 para HTTPS.
- Recibir y analizar peticiones HTTP.
- Localizar y entregar recursos estáticos, como archivos HTML, CSS, JavaScript o imágenes.
- Delegar la ejecución de contenido dinámico a un lenguaje, intérprete, proceso o servidor de aplicaciones.
- Aplicar reglas de configuración: redirecciones, permisos, autenticación, compresión, caché, etc.
- Gestionar conexiones seguras mediante HTTPS.
- Registrar la actividad mediante archivos de log.
Importante: un servidor web no es necesariamente el programa que ejecuta el código de nuestra aplicación. Puede limitarse a recibir la petición y delegarla a otro componente.
1.2 Recepción y procesamiento de peticiones
Cuando escribimos una dirección en el navegador, este construye una petición HTTP y la envía al servidor correspondiente. El servidor debe decidir qué hacer con esa petición y construir una respuesta.
Ejemplo de petición
GET /productos.php?id=25 HTTP/1.1
Host: www.ejemplo.com
User-Agent: Mozilla/5.0
Accept: text/html
En esta petición podemos reconocer:
GET: método HTTP utilizado.
/productos.php?id=25: recurso solicitado y datos enviados en la URL.
Host: servidor al que va dirigida la petición.
- Las líneas siguientes son cabeceras HTTP con información adicional.
Proceso simplificado
- El servidor web acepta la conexión.
- Lee el método, la URL, las cabeceras y, si existe, el cuerpo de la petición.
- Determina qué sitio o aplicación debe atenderla.
- Decide cómo obtener la respuesta: leyendo un archivo o ejecutando/delegando código.
- Construye una respuesta con un código de estado, cabeceras y, normalmente, un cuerpo.
- Envía la respuesta al cliente.
Ejemplo de respuesta
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
<!DOCTYPE html>
<html>
<body>
<h1>Producto 25</h1>
</body>
</html>
Algunos códigos de estado frecuentes son:
| Código | Significado | Ejemplo |
| 200 | Petición correcta | El recurso se ha encontrado y se devuelve. |
| 301 / 302 | Redirección | El cliente debe solicitar otra URL. |
| 403 | Acceso prohibido | El recurso existe, pero no se permite el acceso. |
| 404 | No encontrado | El recurso solicitado no existe. |
| 500 | Error interno | Se ha producido un error durante el procesamiento. |
Recuerda: HTTP funciona mediante un intercambio de petición → procesamiento → respuesta. El navegador no necesita conocer cómo se ha generado internamente la respuesta.
1.3 Modelos de ejecución de código
Cuando el recurso solicitado contiene código de servidor, el servidor web necesita un mecanismo para ejecutarlo o para entregar la petición a otro programa que pueda hacerlo.
1.3.1 Módulo integrado en el servidor web
El intérprete o soporte del lenguaje se carga como un módulo del propio servidor web. El servidor puede ejecutar el código sin iniciar un programa independiente para cada petición.
Navegador
|
| petición .php
v
Apache HTTP Server
|
|-- módulo PHP integrado
| |
| +--> ejecuta PHP
|
+--> devuelve HTML
Un ejemplo clásico es Apache utilizando PHP como módulo (mod_php).
- Ventaja: integración directa y configuración conceptualmente sencilla.
- Limitación: el lenguaje queda estrechamente ligado al proceso y al modelo de ejecución del servidor web.
1.3.2 Intérprete ejecutado mediante CGI
CGI (Common Gateway Interface) define una forma de comunicación entre el servidor web y un programa externo. En el modelo CGI tradicional, el servidor inicia un proceso para ejecutar el programa que atenderá la petición.
Navegador
|
v
Servidor web
|
+----> inicia intérprete/programa CGI
|
+----> ejecuta código
|
+----> genera respuesta
|
v
Navegador
- Ventaja: permite utilizar programas externos escritos en distintos lenguajes.
- Limitación: crear un nuevo proceso para muchas peticiones puede resultar costoso.
1.3.3 Procesos externos persistentes: FastCGI
FastCGI mejora la idea de CGI manteniendo procesos preparados para atender múltiples peticiones. El servidor web envía las peticiones a esos procesos en lugar de crear uno nuevo cada vez.
En PHP es habitual utilizar PHP-FPM (FastCGI Process Manager), que mantiene un conjunto o pool de procesos PHP disponibles.
+----------------------+
| PHP-FPM |
| |
| PHP PHP PHP |
| proc. proc. proc. |
+----------^-----------+
|
| FastCGI
|
Navegador ----HTTP----> Nginx / Apache
^ |
| |
+--------- HTML -----------+
- Ventaja: los procesos se reutilizan y el servidor web queda separado del intérprete.
- Ventaja: permite gestionar de forma independiente cuántos procesos del lenguaje se mantienen activos.
- Ejemplo: Nginx + PHP-FPM.
1.3.4 Aplicación o servidor externo mediante proxy
Muchas aplicaciones modernas incorporan su propio servidor HTTP o se ejecutan en un servidor de aplicaciones. En ese caso, el servidor web frontal actúa como proxy inverso: recibe la petición del cliente y la reenvía a la aplicación.
Cliente
|
| HTTPS
v
Nginx / Apache / Caddy
|
| petición interna
v
Aplicación
(Node.js, Spring Boot, Django,
ASP.NET Core, etc.)
|
| respuesta
v
Servidor web
|
v
Cliente
No confundas: PHP es un lenguaje y necesita un motor que ejecute su código; Apache o Nginx son servidores web. Un servidor web puede ejecutar o delegar el código utilizando diferentes mecanismos.
1.4 Integración entre servidores web y lenguajes de programación
La integración consiste en establecer cómo pasa una petición desde el servidor web hasta el código de la aplicación y cómo vuelve la respuesta. Esta integración depende del servidor y de la tecnología utilizada.
Ejemplo: Apache y PHP mediante módulo
Petición → Apache → módulo PHP → ejecución PHP → HTML → Apache → Cliente
Ejemplo: Nginx y PHP-FPM
Petición → Nginx → FastCGI → PHP-FPM → ejecución PHP
|
Cliente ← Nginx ←----- HTML ------+
Una configuración simplificada de Nginx puede contener una regla similar a esta:
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
La directiva fastcgi_pass indica que las peticiones correspondientes a PHP se enviarán a un servidor FastCGI, por ejemplo PHP-FPM.
Ejemplo: servidor web como proxy inverso
Supongamos que una aplicación se ejecuta en el puerto 3000. El servidor web puede aceptar las conexiones públicas y reenviarlas a esa aplicación.
location / {
proxy_pass http://127.0.0.1:3000;
}
Esta separación permite que el servidor web se ocupe de tareas como HTTPS, archivos estáticos o redirecciones, mientras la aplicación se concentra en la lógica de negocio.
Comparación de mecanismos
| Modelo | Cómo se ejecuta | Ejemplo | Característica principal |
| Módulo | El soporte del lenguaje está integrado en el servidor web. | Apache + mod_php | Integración directa. |
| CGI | El servidor ejecuta un programa externo para procesar la petición. | Script CGI | Modelo sencillo, pero con coste de creación de procesos. |
| FastCGI | Procesos externos persistentes atienden varias peticiones. | Nginx + PHP-FPM | Separa servidor e intérprete. |
| Proxy inverso | El servidor reenvía la petición a otra aplicación o servidor. | Nginx → Node.js / Spring Boot | Desacopla servidor web y aplicación. |
1.5 Principales servidores web actuales
Existen numerosos servidores web. Los siguientes representan soluciones relevantes que permiten comprender los modelos de despliegue que encontraremos actualmente.
Apache HTTP Server
Apache HTTP Server es un servidor web libre y de código abierto desarrollado por la Apache Software Foundation. Su arquitectura es modular: numerosas funcionalidades se incorporan mediante módulos.
- Disponible en distintos sistemas operativos.
- Arquitectura extensible mediante módulos.
- Puede servir contenido estático, actuar como proxy y trabajar con distintas tecnologías de servidor.
- Es especialmente relevante para aprender PHP por su larga integración con este lenguaje.
Nginx
Nginx es un servidor HTTP que también puede actuar como proxy inverso y balanceador. Para ejecutar PHP suele enviar las peticiones a un servidor FastCGI como PHP-FPM.
- Servidor web y proxy inverso.
- Puede servir directamente recursos estáticos.
- Integra aplicaciones mediante FastCGI, proxy HTTP y otros protocolos.
Microsoft Internet Information Services (IIS)
IIS es el servidor web de Microsoft para Windows y Windows Server. Se integra especialmente con el ecosistema .NET y ASP.NET Core mediante módulos específicos de IIS.
LiteSpeed y OpenLiteSpeed
LiteSpeed Web Server y su alternativa de código abierto OpenLiteSpeed son servidores orientados al alojamiento web y permiten integrar aplicaciones PHP mediante mecanismos como LSAPI, CGI y FastCGI.
Caddy
Caddy es un servidor web y proxy extensible escrito en Go. Destaca por automatizar la configuración de HTTPS y puede integrarse con PHP-FPM o actuar como proxy inverso hacia otras aplicaciones.
Tabla resumen
| Servidor | Característica destacada | Ejemplo de integración |
| Apache HTTP Server | Arquitectura modular y gran capacidad de configuración. | Módulo, FastCGI o proxy. |
| Nginx | Servidor HTTP y proxy inverso. | PHP-FPM mediante FastCGI. |
| IIS | Integración con Windows y .NET. | ASP.NET Core Module. |
| LiteSpeed / OpenLiteSpeed | Orientado a alojamiento web y aplicaciones dinámicas. | LSAPI, CGI o FastCGI. |
| Caddy | HTTPS automático y configuración sencilla. | PHP-FPM o proxy inverso. |
Idea clave: elegir un servidor web no determina necesariamente el lenguaje de programación. Lo importante es que exista un mecanismo adecuado para integrar el servidor con la aplicación.