martes, 4 de marzo de 2025

1. Documentación de instalación de Apache

1.1. Actualizar repositorios

Antes de instalar cualquier paquete en tu sistema Linux (por ejemplo, Ubuntu/Debian), conviene asegurarnos de tener los repositorios actualizados:

sudo apt update


1.2. Instalar Apache

Instala el servidor web Apache:

sudo apt install apache2



1.3. Iniciar y habilitar el servicio

Asegúrate de que el servicio Apache esté en ejecución y configurado para iniciarse automáticamente al arrancar el sistema:

sudo systemctl start apache2 

sudo systemctl enable apache2



1.4. Verificar el estado

Para verificar que el servicio se ha iniciado correctamente:

systemctl status apache2




Si todo está bien, deberías ver un mensaje indicando que el servicio está “active (running)”.


1.5. Probar la instalación

Abre un navegador y accede a http://<IP-o-Hostname-de-tu-servidor>/. Debería aparecer la página por defecto de Apache (normalmente el mensaje “It works!” en caso de Debian/Ubuntu).

2. Creación y configuración de los Virtual Hosts

2.1. Estructura de directorios

Para organizar los archivos web de cada dominio, se suelen crear directorios separados dentro de /var/www/. En este ejemplo, creamos:

sudo mkdir -p /var/www/dominio1.com/public_html 

sudo mkdir -p /var/www/dominio2.com/public_html

  • El directorio dominio1.com/public_html/ contendrá la web de dominio1.com

  • El directorio dominio2.com/public_html/ contendrá la web de dominio2.com


2.2. Asignar permisos

Asegúrate de que Apache tenga acceso de lectura (y escritura si fuera necesario) a estos directorios. Por simplicidad, otorgaremos permisos adecuados al propietario “www-data”

sudo chown -R www-data:www-data /var/www/dominio1.com/public_html 

sudo chown -R www-data:www-data /var/www/dominio2.com/public_html 


sudo chmod -R 755 /var/www/dominio1.com/public_html 

sudo chmod -R 755 /var/www/dominio2.com/public_html














2.3. Los archivos index.html para cada dominio

2.3.1. index.html para dominio1.com

/var/www/dominio1.com/public_html/index.html

<html>

<head>

  <title>Bienvenido a Dominio1</title>

</head>

<body>

  <h1>Dominio1</h1>

  <p>Este es el sitio web de dominio1.com</p>

</body>

</html>



2.3.2. index.html para dominio2.com

/var/www/dominio2.com/public_html/index.html

<html>

<head>

  <title>Bienvenido a Dominio2</title>

</head>

<body>

  <h1>Dominio2</h1>

  <p>Este es el sitio web de dominio2.com</p>

</body>

</html>












3. Contenido del fichero de configuración del host virtual dominio1.com

En Ubuntu/Debian, los archivos de configuración de virtual hosts se suelen ubicar en /etc/apache2/sites-available/. Crearemos un archivo de configuración llamado dominio1.com.conf (o dominio1.conf, como prefieras).

3.1. Ejemplo de configuración (dominio1.com.conf)

/etc/apache2/sites-available/dominio1.com.conf

<VirtualHost *:80>

    ServerName dominio1.com

    ServerAlias www.dominio1.com


    DocumentRoot /var/www/dominio1.com/public_html


    <Directory /var/www/dominio1.com/public_html>

        Options -Indexes +FollowSymLinks

        AllowOverride All

        Require all granted

    </Directory>


    ErrorLog ${APACHE_LOG_DIR}/dominio1-error.log

    CustomLog ${APACHE_LOG_DIR}/dominio1-access.log combined

</VirtualHost>



3.2. Explicación de los parámetros (dominio1.com.conf)

  1. <VirtualHost *:80>
    Indica que este bloque de configuración corresponde a peticiones en el puerto 80 (HTTP) dirigidas a todas las interfaces.

  2. ServerName dominio1.com
    Define el nombre principal del dominio que se está configurando.

  3. ServerAlias www.dominio1.com
    Especifica nombres adicionales que deberán apuntar a este mismo Virtual Host, en caso de requerirlo.

  4. DocumentRoot /var/www/dominio1.com/public_html
    Indica la carpeta en la cual se encuentra la web de dominio1.com.

  5. <Directory /var/www/dominio1.com/public_html>
    Bloque de configuración específico para la carpeta public_html.

    • Options -Indexes +FollowSymLinks: desactiva la visualización de índices de directorios y permite seguir enlaces simbólicos.

    • AllowOverride All: permite que los archivos .htaccess sobrescriban la configuración.

    • Require all granted: habilita el acceso a todos los clientes.

  6. ErrorLog / CustomLog
    Indican los archivos de registro de errores y de accesos, respectivamente.




4. Contenido del fichero de configuración del host virtual dominio2.com

Ahora necesitamos que dominio2.com funcione tanto en puerto 80 (HTTP) como en puerto 443 (HTTPS). Para ello, usualmente se crean dos bloques VirtualHost,  uno para el puerto 80 y otro para el 443.

4.1. Ejemplo de configuración (dominio2.com.conf)

/etc/apache2/sites-available/dominio2.com.conf

# Virtual Host para HTTP

<VirtualHost *:80>

    ServerName dominio2.com

    ServerAlias www.dominio2.com


    DocumentRoot /var/www/dominio2.com/public_html


    <Directory /var/www/dominio2.com/public_html>

        Options -Indexes +FollowSymLinks

        AllowOverride All

        Require all granted

    </Directory>


    ErrorLog ${APACHE_LOG_DIR}/dominio2-error.log

    CustomLog ${APACHE_LOG_DIR}/dominio2-access.log combined


    # Opcional: Redirección a HTTPS

    # RewriteEngine on

    # RewriteCond %{SERVER_NAME} =dominio2.com [OR]

    # RewriteCond %{SERVER_NAME} =www.dominio2.com

    # RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

</VirtualHost>










# Virtual Host para HTTPS

<VirtualHost *:443>

    ServerName dominio2.com

    ServerAlias www.dominio2.com


    DocumentRoot /var/www/dominio2.com/public_html


    <Directory /var/www/dominio2.com/public_html>

        Options -Indexes +FollowSymLinks

        AllowOverride All

        Require all granted

    </Directory>


    ErrorLog ${APACHE_LOG_DIR}/dominio2-ssl-error.log

    CustomLog ${APACHE_LOG_DIR}/dominio2-ssl-access.log combined


    # Configuración SSL

    SSLEngine on

    SSLCertificateFile /etc/ssl/certs/dominio2.crt

    SSLCertificateKeyFile /etc/ssl/private/dominio2.key


    # Opcional: certificado intermedio (CA Bundle)

    #SSLCertificateChainFile /etc/ssl/certs/dominio2_ca_bundle.crt

</VirtualHost>





4.2. Explicación de los parámetros

  1. *<VirtualHost :80>
    Configura el Virtual Host para el tráfico HTTP en el puerto 80.

  2. ServerName y ServerAlias
    Igual que con dominio1, definen los nombres asociados a este Virtual Host.

  3. DocumentRoot
    Directorio raíz donde se aloja la web de dominio2.

  4. Redirección a HTTPS (opcional)
    Dentro del bloque de puerto 80, se puede añadir una regla de reescritura para forzar a que todo el tráfico HTTP se redirija a HTTPS. Se hace con RewriteEngine on, RewriteCond, y RewriteRule.

Nota: para usar estas directivas, se requiere habilitar el módulo mod_rewrite:
 

sudo a2enmod rewrite 

  1. *<VirtualHost :443>
    Configura el Virtual Host para el tráfico HTTPS en el puerto 443.

  2. SSLEngine on
    Activa la encriptación SSL.

  3. SSLCertificateFile y SSLCertificateKeyFile
    Rutas al certificado SSL y su clave privada correspondientes a dominio2.com.

  4. SSLCertificateChainFile (Opcional)
    Si tu certificado SSL tiene una cadena de autoridad intermedia (CA Bundle), se debe especificar aquí.

Importante: Para que funcione la conexión HTTPS, es necesario habilitar el módulo SSL y cargar la configuración SSL de Apache. En Ubuntu/Debian se realiza con:

sudo a2enmod ssl

sudo systemctl restart apache2 


Si restart da error en este punto, seguramente será que no hay certificado openssl

4.3. Generación del certificado openssl

Para crear un certificado autofirmado (self-signed) a mano, paso a paso con estos comandos y rellenar la información que te solicite OpenSSL en cada paso:

openssl genrsa -out dominio2.key 2048

Esto genera una clave privada RSA de 2048 bits y la guarda en el archivo dominio2.key.

Con la clave privada  dominio2.key generamos una solicitud de certificado. Durante este proceso, OpenSSL te pedirá que introduzcas datos como país, organización, etc.

openssl req -new -key dominio2.key -out dominio2.csr

  • Cuando te solicite Common Name (CN), debes poner el nombre de dominio que quieres proteger (en este caso, dominio2.com).

  • El resto de valores (Country Name, State, Organization, etc.) puedes rellenarlos como quieras; para una prueba local no es crítico, pero conviene rellenarlos lógicamente.

Resultado:

  • dominio2.csr: archivo de “solicitud” que contiene la información necesaria para que una Autoridad de Certificación (CA) firme tu certificado. En nuestro caso, la CA seremos nosotros mismos (“autofirmado”).

Ahora convertimos la dominio2.csr en un certificado autofirmado, indicando una validez (por ejemplo, 365 días). Usaremos la misma clave privada para firmarlo.

openssl x509 -req -days 365 -in dominio2.csr -signkey dominio2.key -out dominio2.crt

  • -days 365: fija la validez del certificado a 365 días.

  • -in dominio2.csr: la CSR que acabamos de generar.

  • -signkey dominio2.key: utilizamos nuestra clave privada para autofirmar.

  • -out dominio2.crt: el archivo de certificado resultante.

Tras este paso, obtendrás un archivo dominio2.crt que es el certificado propiamente dicho.

4.4. Mover los archivos openssl a las rutas correctas y seguridad

Por convención y como hemos configurado en este trabajo, en la mayoría de distribuciones Linux (Debian/Ubuntu):

  • Clave privada suele ir en /etc/ssl/private/

  • Certificado en /etc/ssl/certs/

sudo mv dominio2.key /etc/ssl/private/ 

sudo mv dominio2.crt /etc/ssl/certs/

Opcionalmente, puedes cambiar los permisos para reforzar la seguridad de la clave privada (solo lectura por root y propietario “root”):

sudo chown root:root /etc/ssl/private/dominio2.key 

sudo chmod 600 /etc/ssl/private/dominio2.key

Como se trata de un certificado autofirmado, el navegador generalmente te mostrará una advertencia indicando que el certificado no fue emitido por una entidad de confianza. Aun así, podrás acceder de forma cifrada (HTTPS).

Para uso en producción es recomendable usar un certificado emitido por una CA de confianza (por ejemplo, Let’s Encrypt). Pero para pruebas internas, el certificado autofirmado sirve perfectamente.



4.5. Asegúrate de tener las rutas correctas en (domnio2.com.conf)

/etc/apache2/sites-available/dominio2.com.conf 

<VirtualHost *:443>

    ServerName dominio2.com

    DocumentRoot /var/www/dominio2.com/public_html


    SSLEngine on

    SSLCertificateFile /etc/ssl/certs/dominio2.crt

    SSLCertificateKeyFile /etc/ssl/private/dominio2.key

    ...

Reinicia Apache para aplicar los cambios.

5. Activar los sitios y reiniciar Apache


Habilita los sitios:

sudo a2ensite dominio1.com.conf 

sudo a2ensite dominio2.com.conf



Reinicia Apache:

sudo systemctl restart apache2


Si el dominio1.com resuelve con otra pagina web, revisa los hosts:

  1. Revisa tu ip → ifconfig

  2. Editar y añade las siguientes líneas a /etc/hostssudo nano /etc/hosts

    1. <IP-de-tu-servidor>   dominio1.com

    2. <IP-de-tu-servidor>   dominio2.com

Ejemplo: 192.168.1.100 dominio1.com

  1. Guarda el archivo y cierra el editor.

  2. Ahora, cuando abras un navegador en ese equipo y visites http://dominio1.com, el sistema resolverá dominio1.com a la IP indicada (en este ejemplo, 192.168.1.100).



6. Capturas de pantalla

  1. Captura de http://dominio1.com

  1. Captura de http://dominio2.com

  1. Captura de https://dominio2.com


« Volver atrás  ·  Inicio

0 comentarios

Publicar un comentario

Suscribirse a Enviar comentarios [Atom]

« Inicio