Apuntes redes

No vayas a access.log, donde habitan los monstruos.

  1. Configuración básica
  2. Virtual Hosts
  3. Módulos de Apache

Configuración Básica:Archivo de configuración principal

La configuración principal de Apache se realiza en diferentes archivos según el sistema:

Ubuntu/Debian: /etc/apache2/apache2.conf

# Configuración básica del servidor
ServerRoot /etc/apache2
PidFile ${APACHE_PID_FILE}

# Timeout y KeepAlive
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

# Configuración de procesos
<IfModule mpm_prefork_module>
    StartServers             8
    MinSpareServers          5
    MaxSpareServers         20
    ServerLimit            256
    MaxRequestWorkers      256
    MaxConnectionsPerChild   0
</IfModule>

# Incluir otras configuraciones
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf

CentOS/RHEL: /etc/httpd/conf/httpd.conf

# Configuración básica del servidor
ServerRoot "/etc/httpd"
Listen 80

# Usuario y grupo
User apache
Group apache

# Configuración de directorio
<Directory />
    AllowOverride none
    Require all denied
</Directory>

# Document Root
DocumentRoot "/var/www/html"

<Directory "/var/www">
    AllowOverride None
    Require all granted
</Directory>

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

# Incluir configuraciones adicionales
IncludeOptional conf.d/*.conf

Windows: C:\Apache24\conf\httpd.conf

# Configuración básica del servidor
Define SRVROOT "C:/Apache24"
ServerRoot "${SRVROOT}"
Listen 80

# Configuración de directorio principal
<Directory />
    AllowOverride none
    Require all denied
</Directory>

# Document Root
DocumentRoot "${SRVROOT}/htdocs"
<Directory "${SRVROOT}/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

# Incluir configuraciones adicionales
Include conf/extra/httpd-vhosts.conf

Configuraciones básicas importantes

Configurar ServerName

# Evitar warnings al iniciar Apache
ServerName localhost:80

Configurar DirectoryIndex

# Archivos que se buscan por defecto en un directorio
<IfModule dir_module>
    DirectoryIndex index.html index.php index.htm
</IfModule>

Configurar tipos MIME

# Incluir tipos MIME
TypesConfig conf/mime.types

# Tipo por defecto
DefaultType text/plain

Virtual Hosts

Los Virtual Hosts permiten alojar múltiples sitios web en un solo servidor Apache.

Tipos de Virtual Hosts

  1. Name-based: Múltiples nombres de dominio en una IP
  2. IP-based: Diferentes IPs para cada sitio
  3. Port-based: Diferentes puertos para cada sitio

Virtual Hosts en Ubuntu/Debian

Crear un Virtual Host

# Crear directorio para el sitio
sudo mkdir -p /var/www/midominio.com/public_html

# Asignar permisos
sudo chown -R www-data:www-data /var/www/midominio.com/public_html
sudo chmod -R 755 /var/www/midominio.com

Crear archivo de configuración

sudo nano /etc/apache2/sites-available/midominio.com.conf
<VirtualHost *:80>
    ServerName midominio.com
    ServerAlias www.midominio.com
    DocumentRoot /var/www/midominio.com/public_html

    <Directory /var/www/midominio.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/midominio.com_error.log
    CustomLog ${APACHE_LOG_DIR}/midominio.com_access.log combined

    # Configuración adicional para desarrollo
    <IfModule mod_rewrite.c>
        RewriteEngine On
    </IfModule>
</VirtualHost>

Habilitar el sitio

# Habilitar el sitio
sudo a2ensite midominio.com.conf

# Deshabilitar sitio por defecto (opcional)
sudo a2dissite 000-default.conf

# Verificar configuración
sudo apache2ctl configtest

# Reiniciar Apache
sudo systemctl restart apache2

Virtual Hosts en CentOS/RHEL: Crear directorio y permisos

sudo mkdir -p /var/www/midominio.com/public_html
sudo chown -R apache:apache /var/www/midominio.com/public_html
sudo chmod -R 755 /var/www/midominio.com

Crear archivo de configuración

sudo nano /etc/httpd/conf.d/midominio.com.conf
<VirtualHost *:80>
    ServerName midominio.com
    ServerAlias www.midominio.com
    DocumentRoot /var/www/midominio.com/public_html

    <Directory /var/www/midominio.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog /var/log/httpd/midominio.com_error.log
    CustomLog /var/log/httpd/midominio.com_access.log combined
</VirtualHost>

Reiniciar Apache

sudo systemctl restart httpd

Virtual Hosts en Windows

Configurar Virtual Host

Editar C:\Apache24\conf\extra\httpd-vhosts.conf:

<VirtualHost *:80>
    DocumentRoot "C:/Apache24/htdocs/midominio.com"
    ServerName midominio.com
    ServerAlias www.midominio.com

    <Directory "C:/Apache24/htdocs/midominio.com">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog "logs/midominio.com-error.log"
    CustomLog "logs/midominio.com-access.log" common
</VirtualHost>

Habilitar Virtual Hosts

En el archivo principal httpd.conf, descomentar:

Include conf/extra/httpd-vhosts.conf

Configurar archivo hosts (para desarrollo)

Linux/macOS

sudo nano /etc/hosts

Windows

C:\Windows\System32\drivers\etc\hosts

Agregar línea:

127.0.0.1    midominio.com www.midominio.com

Módulos de Apache

Los módulos extienden la funcionalidad de Apache. Estos son algunos de los mas comunes. Recuerda que son dos pasos: tener el módulo (que puede venir preinstalado o tendrás que descargar) y activarlo.


Módulo Función
mod_rewrite Reescritura de URLs
mod_ssl Soporte SSL/TLS
mod_headers Manipulación de headers HTTP
mod_deflate Compresión de contenido
mod_expires Control de caché
mod_security Firewall de aplicaciones web

Gestión de módulos en Ubuntu/Debian

# Ver módulos disponibles
ls /etc/apache2/mods-available/

# Ver módulos habilitados
ls /etc/apache2/mods-enabled/

# Habilitar módulo
sudo a2enmod rewrite
sudo a2enmod ssl
sudo a2enmod headers
sudo a2enmod deflate

# Deshabilitar módulo
sudo a2dismod autoindex

# Reiniciar Apache después de cambios
sudo systemctl restart apache2

Gestión de módulos en CentOS/RHEL

Los módulos se configuran editando archivos en /etc/httpd/conf.modules.d/:

# Ver módulos cargados
httpd -M

# Habilitar módulo mod_rewrite
sudo nano /etc/httpd/conf.modules.d/00-base.conf

Descomentar o agregar:

LoadModule rewrite_module modules/mod_rewrite.so

Gestión de módulos en Windows

Editar httpd.conf y descomentar o agregar:

LoadModule rewrite_module modules/mod_rewrite.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule headers_module modules/mod_headers.so

Configuración de mod_rewrite

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted

    # Habilitar mod_rewrite
    RewriteEngine On

    # Ejemplo: Redireccionar www a no-www
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
</Directory>

Configuración de mod_headers

<IfModule mod_headers.c>
    # Agregar header de seguridad
    Header always set X-Content-Type-Options nosniff
    Header always set X-Frame-Options DENY
    Header always set X-XSS-Protection "1; mode=block"

    # HSTS (solo para HTTPS)
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>
TOP