208.1 - Configuración básica de Apache
Peso: 4
Introducción
Apache HTTP Server (httpd) es el servidor web más utilizado históricamente en sistemas Linux. El examen LPIC-2 exige un conocimiento profundo de su instalación, configuración y administración. Apache utiliza una arquitectura modular que permite extender su funcionalidad mediante módulos.
Instalación de Apache
En distribuciones basadas en Debian/Ubuntu
apt install apache2
systemctl enable apache2
systemctl start apache2En distribuciones basadas en Red Hat/CentOS
yum install httpd
systemctl enable httpd
systemctl start httpdPara el examen: Recuerda que en Debian el servicio se llama
apache2y en Red Hat se llamahttpd. Los archivos de configuración también varían según la distribución.
Archivos de configuración principales
| Distribución | Archivo principal | Directorio de configuración |
|---|---|---|
| Debian/Ubuntu | /etc/apache2/apache2.conf | /etc/apache2/ |
| Red Hat/CentOS | /etc/httpd/conf/httpd.conf | /etc/httpd/ |
Estructura en Debian/Ubuntu
/etc/apache2/
├── apache2.conf # Configuración principal
├── ports.conf # Puertos de escucha
├── sites-available/ # VirtualHosts disponibles
├── sites-enabled/ # VirtualHosts habilitados (enlaces simbólicos)
├── mods-available/ # Módulos disponibles
├── mods-enabled/ # Módulos habilitados (enlaces simbólicos)
└── conf-available/ # Fragmentos de configuración
Estructura en Red Hat/CentOS
/etc/httpd/
├── conf/httpd.conf # Configuración principal
├── conf.d/ # Archivos de configuración adicionales
├── conf.modules.d/ # Configuración de módulos
└── modules/ # Enlace a /usr/lib64/httpd/modules/
Directivas fundamentales de configuración
Directivas globales
ServerRoot "/etc/httpd"
Listen 80
Listen 443
ServerAdmin admin@ejemplo.com
ServerName www.ejemplo.com:80
DocumentRoot "/var/www/html"- ServerRoot: Directorio base para la configuración del servidor.
- Listen: Puerto(s) en los que Apache escucha conexiones.
- ServerName: Nombre de host y puerto del servidor.
- DocumentRoot: Directorio raíz donde se sirven los archivos web.
VirtualHost (Hosts virtuales)
Los hosts virtuales permiten alojar múltiples sitios web en un solo servidor.
VirtualHost basado en nombre
<VirtualHost *:80>
ServerName www.sitio1.com
ServerAlias sitio1.com
DocumentRoot /var/www/sitio1
ErrorLog ${APACHE_LOG_DIR}/sitio1-error.log
CustomLog ${APACHE_LOG_DIR}/sitio1-access.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName www.sitio2.com
DocumentRoot /var/www/sitio2
</VirtualHost>VirtualHost basado en IP
<VirtualHost 192.168.1.10:80>
ServerName www.sitio1.com
DocumentRoot /var/www/sitio1
</VirtualHost>
<VirtualHost 192.168.1.11:80>
ServerName www.sitio2.com
DocumentRoot /var/www/sitio2
</VirtualHost>Para el examen: Los VirtualHosts basados en nombre son los más comunes. Cuando se usan VirtualHosts basados en nombre, Apache utiliza la cabecera
Hostde la petición HTTP para determinar qué VirtualHost debe responder.
Directivas de contenedor
Directory, Location y Files
# Aplica configuración a un directorio del sistema de archivos
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# Aplica configuración a una URL
<Location /admin>
Require ip 192.168.1.0/24
</Location>
# Aplica configuración a archivos específicos
<Files ".ht*">
Require all denied
</Files>
# Coincidencia por expresión regular
<DirectoryMatch "^/var/www/.*/private">
Require all denied
</DirectoryMatch>Para el examen: El orden de procesamiento es:
<Directory>y.htaccessprimero, luego<DirectoryMatch>, luego<Files>y<FilesMatch>, y finalmente<Location>y<LocationMatch>.
Módulos importantes
Gestión de módulos en Debian/Ubuntu
a2enmod rewrite # Habilitar módulo
a2dismod rewrite # Deshabilitar módulo
a2ensite sitio1.conf # Habilitar sitio
a2dissite sitio1.conf # Deshabilitar sitio
a2enconf seguridad # Habilitar configuración
a2disconf seguridad # Deshabilitar configuraciónmod_rewrite - Reescritura de URLs
<VirtualHost *:80>
ServerName www.ejemplo.com
RewriteEngine On
RewriteRule ^/antiguo/(.*)$ /nuevo/$1 [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>mod_alias - Alias y redirecciones
Alias /documentos /opt/docs
Redirect permanent /viejo /nuevo
RedirectMatch 301 ^/blog/(.*)$ /articulos/$1
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/mod_ssl - Soporte SSL/TLS
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/ssl/certs/servidor.crt
SSLCertificateKeyFile /etc/ssl/private/servidor.key
</VirtualHost>Control de acceso
Apache 2.4 (método actual con mod_authz)
# Permitir acceso a todos
Require all granted
# Denegar acceso a todos
Require all denied
# Permitir por IP
Require ip 192.168.1.0/24
# Permitir por nombre de host
Require host ejemplo.com
# Requerir usuario autenticado
Require valid-user
# Requerir usuario específico
Require user admin juanAutenticación básica
<Directory /var/www/privado>
AuthType Basic
AuthName "Área restringida"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>htpasswd -c /etc/apache2/.htpasswd usuario1 # Crear archivo y primer usuario
htpasswd /etc/apache2/.htpasswd usuario2 # Añadir usuario adicionalPara el examen: En Apache 2.4 se usa
Requireen lugar de las directivasOrder,AllowyDenyde Apache 2.2. Sin embargo, el módulomod_access_compatpermite usar la sintaxis antigua.
Archivo .htaccess
El archivo .htaccess permite aplicar configuración por directorio sin modificar la configuración principal.
# En httpd.conf - habilitar .htaccess
<Directory /var/www/html>
AllowOverride All
</Directory>- AllowOverride None: Ignora los archivos
.htaccess(mejor rendimiento). - AllowOverride All: Permite todas las directivas en
.htaccess. - AllowOverride AuthConfig: Permite solo directivas de autenticación.
- AllowOverride FileInfo: Permite directivas de tipo de documento.
Registro de eventos (Logging)
Directivas de logging
# Log de errores
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
# Log de acceso
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog ${APACHE_LOG_DIR}/access.log combinedVariables del LogFormat
| Variable | Descripción |
|---|---|
%h | Host remoto (IP del cliente) |
%l | Identidad remota (identd) |
%u | Usuario autenticado |
%t | Fecha y hora de la petición |
%r | Primera línea de la petición |
%>s | Código de estado final |
%b | Tamaño de la respuesta en bytes |
%{Referer}i | Cabecera Referer |
%{User-Agent}i | Cabecera User-Agent |
Control del servicio con apachectl
apachectl start # Iniciar Apache
apachectl stop # Detener Apache
apachectl restart # Reiniciar Apache
apachectl graceful # Reinicio elegante (no corta conexiones activas)
apachectl graceful-stop # Parada elegante
apachectl configtest # Verificar sintaxis de configuración
apachectl -t # Equivalente a configtest
apachectl -S # Mostrar configuración de VirtualHosts
apachectl -M # Listar módulos cargadosPara el examen:
apachectl gracefulenvía la señalSIGUSR1a Apache para que recargue su configuración sin interrumpir las conexiones existentes. Es el método preferido en producción.
Opciones del directorio (Options)
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
</Directory>- Indexes: Muestra listado de directorio si no hay archivo índice.
- FollowSymLinks: Permite seguir enlaces simbólicos.
- MultiViews: Permite negociación de contenido.
- ExecCGI: Permite ejecución de scripts CGI.
- None: Ninguna opción habilitada.
- All: Todas las opciones excepto MultiViews.
MPM (Multi-Processing Modules)
Apache soporta diferentes modelos de procesamiento:
| MPM | Descripción | Uso recomendado |
|---|---|---|
| prefork | Un proceso por conexión | Compatibilidad con módulos no thread-safe (mod_php) |
| worker | Hilos múltiples por proceso | Mayor rendimiento, menor consumo de memoria |
| event | Similar a worker con gestión mejorada de keep-alive | Recomendado para Apache 2.4 |
# Verificar MPM activo
apachectl -V | grep MPM
a2query -M # En Debian/UbuntuPara el examen: El MPM
eventes el predeterminado en Apache 2.4 y ofrece el mejor rendimiento para la mayoría de escenarios. El MPMpreforksigue siendo necesario cuando se usamod_php.
Trampas del examen
Errores comunes y distinciones criticas que LPI suele evaluar en este subtema:
-
Apache 2.4
Requirevs 2.2Order/Allow/Deny— la sintaxis antigua (Order deny,allow/Allow from) NO funciona en Apache 2.4 sinmod_access_compat. Si preguntan por control de acceso moderno, siempre esRequire all granted,Require ip, etc. -
apachectl gracefulvsrestart—gracefulenvia SIGUSR1 y recarga sin cortar conexiones activas.restartenvia SIGHUP y mata todas las conexiones. En produccion siempre se prefieregraceful. -
Orden de procesamiento de contenedores —
<Directory>y.htaccessse procesan primero, luego<DirectoryMatch>, despues<Files>/<FilesMatch>, y finalmente<Location>/<LocationMatch>. Si una pregunta mezcla estos contenedores, el ultimo en procesarse prevalece. -
AllowOverride Nonedeshabilita.htaccess— siAllowOverrideesta enNone, Apache ignora completamente los archivos.htaccess. Ademas,AllowOverridesolo es valido dentro de<Directory>, no en<Location>. -
a2enmod/a2ensiteson exclusivos de Debian — en RHEL/CentOS no existen estos comandos. Los modulos se configuran directamente en archivos de/etc/httpd/conf.modules.d/. El examen puede preguntar la forma correcta segun la distribucion. -
MPM
preforkes obligatorio conmod_php—mod_phpno es thread-safe, asi que no funciona conworkernievent. Si la pregunta menciona PHP con mod_php, el MPM debe serprefork. -
ServerNameno es lo mismo queServerAlias—ServerNamees el nombre principal del VirtualHost.ServerAliasson nombres adicionales. Un VirtualHost solo puede tener unServerName, pero multiplesServerAlias. -
VirtualHost basado en nombre requiere la cabecera
Host— Apache usa la cabecera HTTPHostpara decidir que VirtualHost responde. Sin esta cabecera (clientes HTTP/1.0 antiguos), se sirve el primer VirtualHost definido. -
-tyconfigtestson equivalentes enapachectl— ambos verifican la sintaxis de configuracion. Pero-Smuestra la configuracion de VirtualHosts activos y-Mlista los modulos cargados. No confundir las opciones. -
htpasswd -cCREA el archivo (sobreescribe) — la opcion-cdestruye el contenido previo. Para anadir usuarios adicionales, usarhtpasswdSIN-c. Confundir esto borra todos los usuarios existentes.