Servidor web: Apache y Nginx

Introducción

Los dos servidores web más extendidos en Linux son Apache HTTP Server y Nginx. Apache utiliza un modelo de procesos/hilos por conexión y destaca por su flexibilidad mediante módulos. Nginx usa un modelo asíncrono basado en eventos, lo que le da mejor rendimiento bajo alta concurrencia y lo hace también muy popular como proxy inverso y balanceador de carga.

Apache HTTP Server

Instalación:


# apt install apache2              # Debian/Ubuntu
# dnf install httpd                # RHEL/Rocky
# systemctl enable --now apache2   # Debian/Ubuntu
# systemctl enable --now httpd     # RHEL/Rocky
          

Estructura de ficheros (Debian/Ubuntu):

  • /etc/apache2/apache2.conf → configuración principal
  • /etc/apache2/sites-available/ → VirtualHosts disponibles
  • /etc/apache2/sites-enabled/ → VirtualHosts activos (enlaces simbólicos)
  • /etc/apache2/mods-available/ → módulos disponibles
  • /var/www/html/ → directorio raíz por defecto
  • /var/log/apache2/ → logs de acceso y error

VirtualHost básico:


# /etc/apache2/sites-available/ejemplo.com.conf
<VirtualHost *:80>
    ServerName ejemplo.com
    ServerAlias www.ejemplo.com
    DocumentRoot /var/www/ejemplo.com
    ErrorLog ${APACHE_LOG_DIR}/ejemplo.com-error.log
CustomLog ${APACHE_LOG_DIR}/ejemplo.com-access.log combined
</VirtualHost>
          

Habilitar y deshabilitar sitios y módulos:


# a2ensite ejemplo.com            # habilitar VirtualHost
# a2dissite 000-default            # deshabilitar sitio por defecto
# a2enmod rewrite                  # habilitar módulo mod_rewrite
# a2dismod autoindex               # deshabilitar módulo
# systemctl reload apache2         # aplicar cambios
$ apachectl configtest             # verificar configuración
          

En RHEL/Rocky (/etc/httpd/):


# /etc/httpd/conf/httpd.conf       → configuración principal
# /etc/httpd/conf.d/*.conf         → ficheros de configuración adicionales
# /var/www/html/                   → DocumentRoot por defecto
          

Nginx

Instalación:


# apt install nginx                # Debian/Ubuntu
# dnf install nginx                # RHEL/Rocky
# systemctl enable --now nginx
          

Estructura de ficheros:

  • /etc/nginx/nginx.conf → configuración principal
  • /etc/nginx/sites-available/ → bloques de servidor disponibles (Debian)
  • /etc/nginx/sites-enabled/ → bloques activos (Debian)
  • /etc/nginx/conf.d/ → ficheros de configuración adicionales (RHEL)
  • /var/www/html/ → directorio raíz por defecto
  • /var/log/nginx/ → logs de acceso y error

Bloque server básico:


# /etc/nginx/sites-available/ejemplo.com
server {
    listen 80;
    server_name ejemplo.com www.ejemplo.com;
    root /var/www/ejemplo.com;
    index index.html index.htm;

    access_log /var/log/nginx/ejemplo.com-access.log;
    error_log  /var/log/nginx/ejemplo.com-error.log;

    location / {
        try_files $uri $uri/ =404;
    }
}
          

Habilitar el sitio y verificar:


# ln -s /etc/nginx/sites-available/ejemplo.com /etc/nginx/sites-enabled/
$ nginx -t                         # verificar configuración
# systemctl reload nginx           # aplicar cambios
          

Nginx como proxy inverso:


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

Apache vs Nginx


                    Apache                  Nginx
────────────────────────────────────────────────────────
Modelo              Procesos/hilos          Eventos asíncrono
Configuración       .htaccess por dir.      Centralizada
Módulos dinámicos   Sí (mod_*)              Limitados
Proxy inverso       Sí (mod_proxy)          Nativo y eficiente
Uso típico          Apps PHP, CMS           Estáticos, proxy, alta concurrencia
Config por defecto  /etc/apache2/           /etc/nginx/
          

Ambos servidores pueden coexistir en el mismo sistema (en puertos distintos) y es habitual usar Nginx como proxy inverso delante de Apache o de aplicaciones en Node.js, Python o Java.

Sincronización de tiempo con Chrony

Índice de la sección

Índice del curso