Configurar un VirtualHost en Apache

Tutorial | apache2

Configurar un VirtualHost con http

En linux para configurar un virtual host seguimos los siguientes pasos:

Para la instalación de apache2 en linux usar

sudo apt-get install apache2

Crear el directorio

Se usará como ejemplo miWeb1 y miWeb2

sudo mkdir -p /var/www/miWeb1/public_html
sudo mkdir -p /var/www/miWeb2/public_html

Crear una página de prueba

Sea la página index.html, /var/www/miWeb1/public_html/index.html

<html>
  <head>
    <title>Mi web 1</title>
  </head>
  <body>
    <h1>Mi web 1</h1>
  </body>
</html>

y para la página 2 index.html, /var/www/miWeb2/public_html/index.html

<html>
  <head>
    <title>Mi web 2</title>
  </head>
  <body>
    <h1>Mi web 2</h1>
  </body>
</html>

Crear los archivos de configuración

Para esto copiamos de /etc/apache2/sites-available/000-default.conf

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/miWeb1.conf

El archivo final debe ser:

<VirtualHost *:80>
    ServerAdmin admin@miWeb1.com
    ServerName miWeb1.com
    ServerAlias www.miWeb1.com
    DocumentRoot /var/www/miWeb1.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

y de igual forma para miWeb2

<VirtualHost *:80>
    ServerAdmin admin@miWeb2.com
    ServerName miWeb2.com
    ServerAlias www.miWeb2.com
    DocumentRoot /var/www/miWeb2.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Habilitar los sitios

Se usa el comando a2ensite

sudo a2ensite miWeb1.conf
sudo a2ensite miWeb2.conf

Opcionalmente podemos des habilitar el sitio por defecto

sudo a2dissite 000-default.conf

Ahora reiniciamos el servidor apache

sudo /etc/init.d/apache2 restart

Configurar el host local

En caso de no tener un dominio, podemos modificar localmente el archivo /etc/hosts, quedando

127.0.0.1  localhost
127.0.1.1  miPc

# agregamos
127.0.0.1  miWeb1.com
127.0.0.1  miWeb2.com

Listo, ya podemos visitar nuestro sitios web.

Configurar un VirtualHost con https autofirmado

Usando la configuración anterior, solo necesitamos habilitar ssl, crear las claves y modificar los archivos .conf

Habilitar el módulo SSL

sudo a2enmod ssl

Crear las llaves para https

Crear la llave

cd /etc/ssl/
sudo openssl genrsa -out miWeb1.com.key 2048

Crearmos el certificado

sudo openssl req -new -key miweb1.key -out miWeb1.com.csr

Crear nuestro certificado autofirmado

sudo openssl x509 -req -days 365 -in miWeb1.com.csr -signkey miWeb1.com.key -out miWeb1.com.crt

Modificar los archivos .conf

Ahora modificaremos el archivos /etc/apache2/sites-available/miWeb1.conf

sudo vi /etc/apache2/sites-available/miWeb1.conf

y cambiamos el contenido a:

<VirtualHost *:80>
    ServerAdmin admin@miWeb1.com
    ServerName miWeb1.com
    ServerAlias www.miWeb1.com
    DocumentRoot /var/www/miWeb1.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<IfModule mod_ssl.c>
        <VirtualHost _default_:443>
                ServerName miWeb1.com
                ServerAdmin webmaster@localhost

                DocumentRoot /var/www/miWeb1.com/public_html
                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined

                #   Enable/Disable SSL for this virtual host.
                SSLEngine on
                #SSLCertificateFile     /etc/ssl/certs/ssl-cert-snakeoil.pem
                #SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
                SSLCertificateFile      /etc/ssl/miWeb1.com.crt
                SSLCertificateKeyFile /etc/ssl/miWeb1.com.key
                #SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
                <FilesMatch "\.(cgi|shtml|phtml|php)$">
                                SSLOptions +StdEnvVars
                </FilesMatch>
                <Directory /usr/lib/cgi-bin>
                                SSLOptions +StdEnvVars
                </Directory>
        </VirtualHost>
</IfModule>

Ahora solo queda reiniciar el servidor apache

sudo /etc/init.d/apache2 restart

Configurar un VirtualHost con letsencrypt y certbot

Aquí usaremos las configuraciones anteriores, se modificará el archivo .conf y quien realizará esa modificación es el programa certbot.

Agregar Certbot PPA

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update

Instalar Certbot

sudo apt-get install certbot python-certbot-apache

Elegir como ejecutar Certbot

Obtener los certificados e instalar

sudo certbot --apache

Solo obtener los certificados

sudo certbot certonly --apache

Para cualquiera de los casos responder a las preguntas que nos indican.

Tutorial | apache2