Cómo Servir Subdominios NGINX o Múltiples Dominios

¿Tienes un servidor con una única dirección IP pública, pero necesitas alojar varios dominios o subdominios? ¿Qué harías? Este escenario puede resultar confuso si eres principiante. Pero no te preocupes, este tutorial te tiene cubierto, para que puedas servir un subdominio NGINX y varios dominios.

En este tutorial, aprenderás cómo servir eficientemente subdominios de NGINX o múltiples dominios en un servidor con una única dirección IP.

Si estás listo, ¡es hora de empezar!

Prerrequisitos

Este tutorial incluye demostraciones prácticas, pero no requiere muchos prerrequisitos y asumirá que tienes un Ubuntu Server LTS con el SSH habilitado e NGINX instalado. Las demostraciones en este tutorial están basadas en Ubuntu Server LTS 20.04.1.

Configuración de los registros DNS

Antes de poder servir subdominios de NGINX o múltiples dominios, deberás agregar un registro A en un panel de control DNS. El registro A vincula y apunta todos los dominios y subdominios a una única dirección IP para permitir que los navegadores web encuentren tu sitio web.

1. Abre tu navegador web favorito e inicia sesión en tu panel de control de DNS.

2. Haz clic en Agregar Registro para comenzar a agregar registros A. Tu navegador se redirigirá a una página donde configurarás la configuración de DNS para tu dominio y subdominios.

Adding an A Record

Ahora configura la configuración de DNS con lo siguiente:

Selecciona Registro A en el campo Tipo.

Ingresa @ en el campo Host y la IP de tu servidor en el campo Valor.

Selecciona el valor deseado en el campo TTL, luego haz clic en el botón Confirmar para guardar la configuración.

Repite el mismo proceso para otros subdominios.

Configuring DNS settings for Domain and Subdomains The final DNS Settings page looks like the one below.

La página final de Configuración de DNS se verá como la siguiente.

Viewing DNS Settings Page

Tu panel de control de registros DNS puede variar en funcionalidad y diseño, pero los mismos principios se aplicarán a todos.

Configuración de directorios web para dominios y subdominios NGINX

Ahora que has agregado registros A para tu dominio y subdominios, es hora de configurar sus directorios web. NGINX viene con un archivo de host virtual predeterminado y está configurado para servir un directorio web ubicado en /usr/share/nginx/html.

Crearás un directorio web separado para cada dominio dentro de la raíz de documentos predeterminada de NGINX (/var/www/html).

1. Primero, abre tu terminal y ejecuta los comandos a continuación para crear directorios web para todos los dominios y subdominios. De esta manera, se separan, organizan e aislan los archivos para cada sitio web.

sudo mkdir /var/www/html/awstutorial.net
sudo mkdir /var/www/html/web1.awstutorial.net
sudo mkdir /var/www/html/web2.awstutorial.net

2. A continuación, ejecuta el comando chown de forma recursiva (-R) para cambiar la propiedad de cada directorio creado en el paso uno al usuario y grupo www-data. Cambias la propiedad de cada directorio al usuario y grupo www-data ya que NGINX se ejecuta como usuario www-data.

sudo chown -R www-data:www-data /var/www/html/awstutorial.net
sudo chown -R www-data:www-data /var/www/html/web1.awstutorial.net
sudo chown -R www-data:www-data /var/www/html/web2.awstutorial.net

3. Crea un archivo llamado index.html en tu editor de código preferido y luego copia/pega el código a continuación en el archivo index.html. Guarda el archivo dentro del directorio web principal de tus dominios (/var/www/html/awstutorial.net).

El código HTML a continuación muestra un mensaje que dice “¡Felicidades! ¡El sitio web awstutorial.net está funcionando!” cuando el archivo index.html se abre en un navegador web.

<html>
	<head>
	  <title>Welcome to awstutorial.net!</title>
  </head>
	  <body>
	    <h1>Congratulations! The awstutorial.net website is working!</h1>
    </body>
</html>

4. Finalmente, crea el mismo index.html en los directorios /var/www/html/web1.awstutorial.net y /var/www/html/web2.awstutorial.net. Pero reemplaza awstutorial.net con web1.awstutorial.net y web2.awstutorial.net en el código de cada index.html según corresponda.

Configuración de un Host Virtual para el Dominio y Subdominios de NGINX

Ya tienes una página index.html para que tu dominio y subdominios se sirvan a través de un servidor web NGINX. El siguiente paso es crear un archivo de configuración de host virtual NGINX para cada dominio y servir las páginas HTML.

1. Crea un archivo de configuración de host virtual de NGINX llamado awstutorial.net en tu editor de código preferido, y luego copia/pega el código a continuación en ese archivo. Guarda el archivo en el directorio /etc/nginx/sites-available/.

El código a continuación controla el comportamiento de tu servidor, como el nombre del servidor y la página de inicio (índice) cuando un usuario intenta acceder a tu dominio.

server {
        # Enlaza el puerto TCP 80.
        listen 80; 

				# Directorio raíz utilizado para buscar un archivo
        root /var/www/html/awstutorial.net;
				# Define el archivo a utilizar como página de índice
        index index.html index.htm;
				# Define el nombre de dominio o subdominio. 
        # Si no se define server_name en un bloque server entonces 
				# Nginx utiliza el nombre 'empty'
        server_name awstutorial.net;

        location / {
            # Devuelve un error 404 para casos en los que el servidor recibe 
						# solicitudes para archivos y directorios no rastreables.
            try_files $uri $uri/ =404;
        }
    }

2. A continuación, ejecuta el siguiente comando nginx para verificar (-t) el archivo de configuración de NGINX en busca de cualquier error de sintaxis.

sudo nginx -t

Si no se encuentra ningún error de sintaxis en el archivo de configuración de NGINX, obtendrás la siguiente salida.

Verifying NGINX configuration file

3. A continuación, ejecuta el siguiente comando para crear un enlace simbólico (ln -s) desde el directorio /etc/nginx/sites-available hasta el directorio /etc/nginx/sites-enabled/. Este comando habilita el archivo de configuración del host virtual awstutorial.net.

sudo ln -s /etc/nginx/sites-available/awstutorial.net /etc/nginx/sites-enabled/

Los formatos sites-available y sites-enabled son estándar en una instalación de NGINX en Ubuntu, pero otras distribuciones pueden utilizar un estándar diferente.

4. Repite los pasos del uno al tres para crear archivos de configuración de host virtual de NGINX llamados web1.awstutorial.net y web2.awstutorial.net.

Cambia las siguientes líneas en cada archivo de configuración de host virtual de NGINX:

  • Reemplaza la línea root /var/www/html/awstutorial.net con el directorio raíz de cada subdominio (root /var/www/html/web1.awstutorial.net y root /var/www/html/web2.awstutorial.net).
  • Reemplaza la línea server_name awstutorial.net con el nombre de cada subdominio (server_name web1.awstutorial.net y server_name web2.awstutorial.net).

5. Ahora ejecuta los comandos sudo ln a continuación, como lo hiciste en el paso tres, para habilitar los archivos de configuración del host virtual.

# Habilita el archivo de configuración del host virtual NGINX para web1.awstutorial.net
sudo ln -s /etc/nginx/sites-available/web1.awstutorial.net /etc/nginx/sites-enabled/
# Habilita el archivo de configuración del host virtual NGINX para web2.awstutorial.net
sudo ln -s /etc/nginx/sites-available/web2.awstutorial.net /etc/nginx/sites-enabled/

6. Ejecuta el siguiente comando systemctl para reiniciar el servicio NGINX (restart nginx) y aplicar todos los cambios de configuración.

sudo systemctl restart nginx

7. Finalmente, navega a las URL del dominio y subdominios en tu navegador para comprobar si los sitios web funcionan correctamente.

Si el dominio y los subdominios se cargan correctamente, verás un mensaje como el siguiente.

Verifying websites are loading through the web browser.

Configuración de HTTPS en el Dominio y Subdominio de NGINX

Has configurado y probado correctamente un dominio y subdominios de NGINX en el protocolo HTTP, lo cual es excelente. Pero debes asegurar la conexión de tu dominio y subdominios habilitando HTTPS. ¿Cómo? Con un certificado que obtendrás de una Autoridad de Certificación como Let’s Encrypt SSL.

1. Primero, ejecuta el siguiente comando para instalar el paquete de software Certbot (apt-get install certbot). Certbot te permite descargar un certificado SSL para tu dominio y subdominios.

sudo apt-get install certbot python3-certbot-nginx -y

2. A continuación, ejecuta el comando certbot que se muestra a continuación para descargar un certificado SSL (certonly) para tu dominio (-d awstutorial.net). Ten en cuenta que aceptas los términos del servicio (--agree-tos) con tu dirección de correo electrónico (--email).

sudo certbot certonly --agree-tos --email [email protected] -d awstutorial.net

Reemplaza el correo electrónico con el tuyo.

3. Ingresa ‘1’ para seleccionar el plugin del Servidor Web NGINX (nginx) para autenticarte con el ACME CA, como se muestra a continuación.

Selecting Plugin to Authenticate with ACME CA

Después de seleccionar el plugin del Servidor Web NGINX, verás el progreso de la descarga del certificado SSL para tu dominio (awstutorial.net).

Por defecto, los certificados SSL de Let’s Encrypt se almacenan en el directorio /etc/letsencrypt/live/.

Showing Download Progress of the SSL Certificate

4. Ahora ejecuta cada comando a continuación como lo hiciste en el paso dos para descargar los certificados SSL para los subdominios restantes (web1.awstutorial.net y web2.awstutorial.net).

sudo certbot certonly --agree-tos --email [email protected] -d web1.awstutorial.net
sudo certbot certonly --agree-tos --email [email protected] -d web2.awstutorial.net

5. Por último, ejecuta el comando ls a continuación para listar todos los certificados SSL en el directorio /etc/letsencrypt/live/ que contienen (*) el awstutorial.net en sus nombres. Haciéndolo así, podrás verificar que los certificados SSL existen.

ls /etc/letsencrypt/live/*awstutorial.net/

A continuación, verás los certificados SSL para tu dominio y subdominios.

Showing SSL certificate for all domains.

Configurando el Host Virtual de NGINX para Usar Certificados SSL

En este punto, ya tienes certificados SSL a tu disposición. ¿Pero cómo los utilizas para asegurar tu dominio y subdominios? Definirás la ruta de los certificados en el bloque server de cada archivo de configuración del host virtual NGINX.

1. Abre el archivo de configuración del host virtual NGINX de awstutorial.net que se encuentra en el directorio /etc/nginx/sites-available/ en tu editor de código preferido.

2. Reemplaza el contenido del archivo con el siguiente código, donde defines la ruta del certificado SSL de tu dominio y el protocolo SSL (bajo Ruta del certificado SSL).

server {
	     # Enlaza el puerto TCP 80.
       listen 80;
	     # Define el nombre de dominio o subdominio. 
       # Si no se define server_name en un bloque de servidor entonces 
	     # Nginx utiliza el nombre 'empty'
       server_name awstutorial.net;
	     # Redirige el tráfico al 
	     # bloque de servidor HTTPS correspondiente con el código de estado 301
       return 301 https://$host$request_uri;
       }

server {
        # Enlaza el puerto TCP 443 y habilita SSL.
        listen 443 SSL;
	      # Directorio raíz usado para buscar un archivo        
	      root /var/www/html/awstutorial.net; 
	      # Define el nombre de dominio o subdominio. 
        # Si no se define server_name en un bloque de servidor entonces 
	      # Nginx utiliza el nombre 'empty'
        server_name awstutorial.net;

	      # Ruta del certificado SSL
        ssl_certificate /etc/letsencrypt/live/awstutorial.net/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/awstutorial.net/privkey.pem;
	      # Usa el archivo generado por el comando certbot.
        include /etc/letsencrypt/options-ssl-nginx.conf;
	      # Define la ruta del archivo dhparam.pem.
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

        location / {
	      # Retorna un error 404 para instancias cuando el servidor recibe 
	      # solicitudes para archivos y directorios no rastreables.
        try_files $uri $uri/ =404;
        }

    }

3. Repita el mismo proceso (pasos uno a dos) para los archivos de configuración de host virtual restantes (web1.awstutorial.net y web2.awstutorial.net). Pero asegúrese de reemplazar la ruta del certificado SSL con la ruta del certificado de su subdominio (bajo Ruta del certificado SSL).

4. Ahora vuelva a ejecutar el comando systemctl a continuación para reiniciar el servicio NGINX y aplicar los cambios de configuración.

sudo systemctl restart nginx

5. Finalmente, navegue a las URL de su dominio y subdominio en su navegador web. Pero esta vez, en lugar del protocolo HTTP, use HTTPS para ver si funcionan.

A continuación, puede ver un icono de candado en la barra de direcciones, que indica que el sitio web está seguro con su certificado SSL.

Verifying Domain is Secure

Conclusión

En este tutorial, ha aprendido cómo servir un subdominio NGINX o varios dominios configurando un archivo de configuración de host virtual. También ha abordado la seguridad de sus dominios con un certificado SSL que también define en el archivo de configuración de host virtual.

Ahora, ¿por qué no utilizar esta configuración en un entorno de producción, como para alojar varias aplicaciones en un solo servidor y proporcionar alojamiento web asequible?

Source:
https://adamtheautomator.com/nginx-subdomain/