¿Cómo configurar Nginx para múltiples dominios en la misma IP?

Publicado 17 de octubre de 2024

Problema: Alojar múltiples dominios en una sola IP

Alojar varios sitios web con diferentes nombres de dominio en una sola dirección IP de servidor puede ser complicado. Nginx, un popular servidor web, ofrece una solución a este problema, pero requiere la configuración adecuada para manejar múltiples dominios.

Solución: Configuración correcta de Nginx para múltiples dominios

Configurar bloques de servidor

Los bloques de servidor en Nginx ayudan a alojar múltiples dominios en un solo servidor. Permiten establecer diferentes configuraciones para cada dominio, incluyendo directorios raíz y registro.

Para crear bloques de servidor para cada dominio, defínalos en su archivo de configuración de Nginx. Cada bloque de servidor comienza con la directiva server y contiene la configuración para ese dominio.

Consejo: Organice su configuración

Mantenga su configuración de Nginx ordenada creando archivos separados para cada dominio en el directorio /etc/nginx/sites-available/. Luego, cree enlaces simbólicos a estos archivos en el directorio /etc/nginx/sites-enabled/ para activarlos.

Configurar la directiva Listen

La directiva 'listen' en Nginx le indica al servidor qué dirección IP y puerto usar para las conexiones entrantes. Al configurar múltiples dominios, use la directiva 'listen' correctamente.

La forma adecuada de usar la directiva 'listen' es especificar solo el número de puerto, generalmente 80 para HTTP o 443 para HTTPS. Por ejemplo:

listen 80;

No incluya el dominio en la directiva 'listen'. Esto es incorrecto y puede causar problemas.

Usar la directiva Server_Name

La directiva 'server_name' es importante para el enrutamiento de dominios en Nginx. Le indica a Nginx qué nombres de dominio asociar con un bloque de servidor.

Para configurar 'server_name' para cada dominio, inclúyalo en el bloque del servidor. Por ejemplo:

server_name www.dominio1.ejemplo dominio1.ejemplo;

Puede agregar múltiples nombres de dominio, con y sin el prefijo 'www', para cubrir todas las versiones de su nombre de dominio.

Ejemplo: Subdominios comodín

Si desea que coincida con todos los subdominios de un dominio, puede usar un comodín en la directiva server_name:

server_name *.dominio1.ejemplo;

Esto coincidirá con cualquier subdominio de dominio1.ejemplo.

Guía paso a paso para configurar Nginx para múltiples dominios

Editar el archivo de configuración de Nginx

Para configurar múltiples dominios en Nginx, localice y abra el archivo de configuración principal de Nginx. En la mayoría de los sistemas, este archivo se encuentra en /etc/nginx/nginx.conf. Es mejor crear archivos de configuración separados para cada dominio en el directorio /etc/nginx/sites-available/.

Para crear bloques de servidor separados para cada dominio:

  1. Abra un nuevo archivo en el directorio sites-available:

    sudo nano /etc/nginx/sites-available/dominio1.conf
  2. Agregue un bloque de servidor para su primer dominio:

    server {
       listen 80;
       server_name dominio1.com www.dominio1.com;
       # Otras directivas...
    }
  3. Repita este proceso para su segundo dominio en un nuevo archivo:

    sudo nano /etc/nginx/sites-available/dominio2.conf
  4. Agregue el bloque de servidor para el segundo dominio:

    server {
       listen 80;
       server_name dominio2.com www.dominio2.com;
       # Otras directivas...
    }

Consejo: Crear enlaces simbólicos para los archivos de configuración

Después de crear archivos de configuración en el directorio sites-available, cree enlaces simbólicos para habilitarlos:

sudo ln -s /etc/nginx/sites-available/dominio1.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/dominio2.conf /etc/nginx/sites-enabled/

Este método le permite habilitar o deshabilitar sitios fácilmente creando o eliminando enlaces simbólicos.

Configurar directorios raíz

Los directorios raíz separados para cada dominio mantienen los archivos de diferentes sitios web separados, facilitando la gestión y la seguridad.

Para especificar directorios raíz en la configuración:

  1. Cree directorios para cada dominio:

    sudo mkdir -p /var/www/dominio1.com
    sudo mkdir -p /var/www/dominio2.com
  2. En el bloque de servidor de cada dominio, agregue la directiva root:

    server {
       listen 80;
       server_name dominio1.com www.dominio1.com;
       root /var/www/dominio1.com;
       # Otras directivas...
    }

Configurar el procesamiento de PHP (si es aplicable)

Si sus sitios web usan PHP, configure FastCGI para el procesamiento de PHP:

  1. En cada bloque de servidor, agregue un bloque de ubicación para PHP:

    server {
       # Otras directivas...
       location ~ \.php$ {
           fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
           fastcgi_index index.php;
           include fastcgi_params;
       }
    }
  2. Asegúrese de que los parámetros FastCGI sean correctos para cada dominio. Las directivas fastcgi_param deben apuntar al directorio raíz correcto:

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

Después de hacer estos cambios, pruebe su configuración de Nginx y reinicie el servicio Nginx para aplicar los cambios.