Generador de host virtual de Apache

Escribe el dominio y la carpeta con los archivos del sitio, elige HTTPS y los extras, y copia una configuración completa de Apache 2.4: el bloque del puerto 80 con la redirección y el del 443 con certificados, permisos de carpeta y logs.

La carpeta con los archivos del sitio, ruta absoluta.
Déjalo vacío para usar las rutas de Let's Encrypt en /etc/letsencrypt/live/<dominio>/.

Debian/Ubuntu: guárdalo como /etc/apache2/sites-available/<dominio>.conf y ejecuta a2ensite <dominio>, a2enmod ssl headers http2 si hace falta, apachectl configtest y systemctl reload apache2.

Funciona en tu navegador: nada de lo que escribes se envía a ningún sitio.

Cómo se usa

  1. Escribe el dominio sin http:// y decide si www. también debe funcionar.
  2. Indica la raíz de documentos, por ejemplo /var/www/example.com/public.
  3. Para HTTPS, deja vacíos los campos del certificado si usas certbot o escribe tus propias rutas.
  4. Elige los extras, copia la configuración y sigue la nota de debajo para activar el sitio.

Cómo funciona

  • ServerName y ServerAlias deciden a qué peticiones responde el bloque.
  • <Directory> da acceso con la sintaxis de Apache 2.4 Require all granted, fija Options -Indexes +FollowSymLinks (o +Indexes para los listados) y AllowOverride All o None.
  • Con HTTPS, el bloque 443 añade SSLEngine on y los archivos del certificado; el bloque 80 redirige con Redirect permanent / https://dominio/ o sirve el mismo sitio.
  • HTTP/2 añade Protocols h2 http/1.1 (módulo http2) y HSTS añade Header always set Strict-Transport-Security "max-age=31536000" (módulo headers).
  • Los logs van a <carpeta>/<dominio>-error.log y <dominio>-access.log en formato combined.

Ejemplo

Para example.com con www, HTTPS, redirección, HTTP/2 y logs, el bloque del puerto 80 es:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    Redirect permanent / https://example.com/
</VirtualHost>

El bloque del 443 tiene los mismos nombres, DocumentRoot /var/www/example.com/public, la sección <Directory>, las dos líneas de logs y:

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    Protocols h2 http/1.1

Consejos

  • Ejecuta apachectl configtest antes de cada recarga: una errata impide que Apache arranque.
  • Obtén primero el certificado (certbot certonly --webroot o con la configuración solo HTTP) y luego activa HTTPS: Apache no arranca si falta un archivo de certificado.
  • Los archivos de la raíz deben poder leerse por el usuario de Apache (www-data o apache); guarda los secretos fuera de ella.

Preguntas frecuentes

¿Dónde va el archivo?

En Debian y Ubuntu, en /etc/apache2/sites-available/ como example.com.conf, y se activa con a2ensite example.com. En RHEL, Fedora y similares, en /etc/httpd/conf.d/ como example.com.conf, que se lee automáticamente. Después recarga Apache.

¿Por qué hay dos bloques VirtualHost?

Uno escucha en el puerto 80 para HTTP y otro en el 443 para HTTPS. Con la redirección activada, el bloque del puerto 80 solo envía a los visitantes a la dirección HTTPS con un 301, y conserva el nombre y el alias para que se redirijan tanto example.com como www.example.com.

¿Qué archivos de certificado uso con Let's Encrypt?

certbot los guarda en /etc/letsencrypt/live/<dominio>/: fullchain.pem para SSLCertificateFile y privkey.pem para SSLCertificateKeyFile. Desde Apache 2.4.8 el archivo del certificado puede contener toda la cadena, así que SSLCertificateChainFile no hace falta.

¿Qué cambia AllowOverride All?

Permite que los archivos .htaccess de la raíz modifiquen la configuración, algo de lo que dependen muchas aplicaciones PHP para las URL amigables. Con None, Apache no lee ningún .htaccess, lo que es algo más rápido; en ese caso las reglas van en el host virtual.

¿Debo activar HSTS?

Solo si el sitio y todos los subdominios que uses funcionan por HTTPS. Los navegadores que han visto la cabecera rechazan HTTP para el dominio durante todo el max-age, un año aquí, aunque después quites HTTPS.

¿Qué es ${APACHE_LOG_DIR}?

Una variable definida en el archivo envvars de Debian y Ubuntu, normalmente /var/log/apache2. En otros sistemas escribe una carpeta real, como /var/log/httpd.

Más en Desarrollo

Todas las herramientas de la categoría: Desarrollo ·Actualizado el 4 de noviembre de 2026

Opciones de privacidad

Google Analytics nos muestra qué herramientas se usan y si funcionan. Puede usar cookies. Tu elección se guarda en este navegador.