Skip to content

Web

This content is not available in your language yet.

8.1 Servidores Web en Linux: Nginx y Apache en Producción

Sección titulada «8.1 Servidores Web en Linux: Nginx y Apache en Producción»

Los servidores web son uno de los componentes más críticos en cualquier infraestructura moderna. Son el punto de entrada para aplicaciones, APIs, paneles de administración y servicios públicos. En Linux, los dos servidores más utilizados son Nginx y Apache, cada uno con enfoques arquitectónicos distintos y casos de uso específicos.

Como Sysadmin senior, no basta con instalar un servidor web: debes configurarlo de forma segura, optimizada y preparada para producción, garantizando rendimiento, resiliencia y escalabilidad.


Al finalizar este capítulo serás capaz de:

  • Comprender las diferencias entre Nginx y Apache.
  • Instalar y configurar un servidor web en Linux.
  • Gestionar hosts virtuales (virtual hosts/server blocks).
  • Servir contenido estático y aplicaciones backend.
  • Configurar logs y diagnosticar problemas.
  • Aplicar buenas prácticas de seguridad y rendimiento.

  • Basado en procesos/hilos.
  • Alta compatibilidad.
  • Uso tradicional en entornos legacy.
  • Basado en eventos (event-driven).
  • Alto rendimiento bajo carga.
  • Ideal como reverse proxy.

En entornos modernos, Nginx es preferido por su eficiencia y escalabilidad.


Nginx utiliza un modelo:

  • Worker processes
  • Event loop

Ventajas:

  • bajo consumo de memoria
  • alta concurrencia
  • excelente manejo de conexiones simultáneas

  1. Cliente → petición HTTP
  2. Servidor web → interpreta ruta
  3. Respuesta:
    • archivo estático
    • proxy a backend (PHP, Node, etc.)

Permiten servir múltiples dominios desde un mismo servidor.

Ejemplo:

  • example.com
  • api.example.com

/etc/nginx/nginx.conf
/etc/nginx/sites-available/
/etc/nginx/sites-enabled/
/etc/apache2/apache2.conf
/etc/apache2/sites-available/

Desplegar un servidor web con Nginx:

  • servir contenido estático
  • configurar dominio
  • habilitar logs
  • validar acceso

Ventana de terminal
sudo apt update
sudo apt install nginx

Ventana de terminal
systemctl status nginx

Ventana de terminal
curl http://localhost

Output esperado:

<html>
Welcome to nginx!
</html>


Ventana de terminal
sudo mkdir -p /var/www/app
echo "Hola mundo" | sudo tee /var/www/app/index.html

Ventana de terminal
sudo nano /etc/nginx/sites-available/app

Contenido:

server {
listen 80;
server_name app.local;
root /var/www/app;
index index.html;
access_log /var/log/nginx/app_access.log;
error_log /var/log/nginx/app_error.log;
location / {
try_files $uri $uri/ =404;
}
}

  • server_name → dominio
  • root → directorio web
  • try_files → control de rutas

Ventana de terminal
sudo ln -s /etc/nginx/sites-available/app /etc/nginx/sites-enabled/

Ventana de terminal
sudo nginx -t

Ventana de terminal
sudo systemctl reload nginx

Ventana de terminal
curl http://app.local


location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}


Ventana de terminal
sudo apt install apache2

Ventana de terminal
sudo nano /etc/apache2/sites-available/app.conf
<VirtualHost *:80>
ServerName app.local
DocumentRoot /var/www/app
</VirtualHost>

Ventana de terminal
sudo a2ensite app
sudo systemctl reload apache2

-Causa:*

  • permisos incorrectos.

Solución:

Ventana de terminal
chmod -R 755 /var/www/app

  • ruta incorrecta
  • archivo inexistente

Ventana de terminal
nginx -t

Verifica errores de config.


Ventana de terminal
ss -tulnp | grep :80

Editar:

Ventana de terminal
/etc/hosts
127.0.0.1 app.local

  • un config por aplicación
  • modularidad

access_log /var/log/nginx/app.log;

  • desactivar directory listing
  • ocultar versión del servidor
server_tokens off;

Implementar TLS (Let’s Encrypt):

Ventana de terminal
apt install certbot

  • Node.js
  • Python
  • Go

worker_processes auto;

limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

  • firewall activo
  • SELinux/AppArmor configurado
  • no ejecutar como root

Has aprendido a instalar, configurar y operar servidores web en Linux con Nginx y Apache, incluyendo virtual hosts, reverse proxy y troubleshooting. Este conocimiento es esencial para desplegar servicios web robustos en producción.

El siguiente paso es abordar otro componente crítico de cualquier aplicación:

➡️ 8.2 Bases de Datos, donde aprenderás a desplegar, asegurar y optimizar sistemas como MySQL, PostgreSQL o MariaDB.