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/