Como configurar o Nginx para múltiplos domínios no mesmo IP?

Publicado 17 de outubro de 2024

Problema: Hospedar Múltiplos Domínios em Um Único IP

Hospedar vários sites com nomes de domínio diferentes em um único endereço IP de servidor pode ser complexo. O Nginx, um servidor web popular, oferece uma solução para esse problema, mas requer a configuração adequada para lidar com múltiplos domínios.

Solução: Configuração Correta do Nginx para Múltiplos Domínios

Configurando Blocos de Servidor

Os blocos de servidor no Nginx ajudam a hospedar múltiplos domínios em um servidor. Eles permitem definir configurações diferentes para cada domínio, incluindo diretórios raiz e registros.

Para criar blocos de servidor para cada domínio, defina-os no arquivo de configuração do Nginx. Cada bloco de servidor começa com a diretiva server e contém configurações para aquele domínio.

Dica: Organize Sua Configuração

Mantenha sua configuração do Nginx organizada criando arquivos separados para cada domínio no diretório /etc/nginx/sites-available/. Em seguida, crie links simbólicos para esses arquivos no diretório /etc/nginx/sites-enabled/ para ativá-los.

Configurando a Diretiva Listen

A diretiva 'listen' no Nginx informa ao servidor qual endereço IP e porta usar para conexões recebidas. Ao configurar múltiplos domínios, use a diretiva 'listen' corretamente.

A forma adequada de usar a diretiva 'listen' é especificar apenas o número da porta, geralmente 80 para HTTP ou 443 para HTTPS. Por exemplo:

listen 80;

Não inclua o domínio na diretiva 'listen'. Isso é incorreto e pode causar problemas.

Usando a Diretiva Server_Name

A diretiva 'server_name' é importante para o roteamento de domínios no Nginx. Ela informa ao Nginx quais nomes de domínio associar a um bloco de servidor.

Para configurar o 'server_name' para cada domínio, inclua-o no bloco do servidor. Por exemplo:

server_name www.dominio1.exemplo dominio1.exemplo;

Você pode adicionar vários nomes de domínio, com e sem o prefixo 'www', para cobrir todas as versões do seu nome de domínio.

Exemplo: Subdomínios Curinga

Se você quiser corresponder a todos os subdomínios de um domínio, pode usar um curinga na diretiva server_name:

server_name *.dominio1.exemplo;

Isso corresponderá a qualquer subdomínio de dominio1.exemplo.

Guia Passo a Passo para Configurar o Nginx para Múltiplos Domínios

Editando o Arquivo de Configuração do Nginx

Para configurar múltiplos domínios no Nginx, localize e abra o arquivo principal de configuração do Nginx. Na maioria dos sistemas, este arquivo está em /etc/nginx/nginx.conf. É melhor criar arquivos de configuração separados para cada domínio no diretório /etc/nginx/sites-available/.

Para criar blocos de servidor separados para cada domínio:

  1. Abra um novo arquivo no diretório sites-available:

    sudo nano /etc/nginx/sites-available/dominio1.conf
  2. Adicione um bloco de servidor para seu primeiro domínio:

    server {
       listen 80;
       server_name dominio1.com www.dominio1.com;
       # Outras diretivas...
    }
  3. Repita esse processo para seu segundo domínio em um novo arquivo:

    sudo nano /etc/nginx/sites-available/dominio2.conf
  4. Adicione o bloco de servidor para o segundo domínio:

    server {
       listen 80;
       server_name dominio2.com www.dominio2.com;
       # Outras diretivas...
    }

Dica: Links Simbólicos para Arquivos de Configuração

Após criar arquivos de configuração no diretório sites-available, crie links simbólicos para habilitá-los:

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 permite habilitar ou desabilitar sites facilmente criando ou removendo links simbólicos.

Configurando Diretórios Raiz

Diretórios raiz separados para cada domínio mantêm os arquivos de diferentes sites separados, facilitando o gerenciamento e a segurança.

Para especificar diretórios raiz na configuração:

  1. Crie diretórios para cada domínio:

    sudo mkdir -p /var/www/dominio1.com
    sudo mkdir -p /var/www/dominio2.com
  2. Em cada bloco de servidor do domínio, adicione a diretiva root:

    server {
       listen 80;
       server_name dominio1.com www.dominio1.com;
       root /var/www/dominio1.com;
       # Outras diretivas...
    }

Configurando o Processamento PHP (se aplicável)

Se seus sites usam PHP, configure o FastCGI para processamento PHP:

  1. Em cada bloco de servidor, adicione um bloco de localização para PHP:

    server {
       # Outras diretivas...
       location ~ \.php$ {
           fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
           fastcgi_index index.php;
           include fastcgi_params;
       }
    }
  2. Certifique-se de que os parâmetros FastCGI estejam corretos para cada domínio. As diretivas fastcgi_param devem apontar para o diretório raiz correto:

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

Após fazer essas alterações, teste sua configuração do Nginx e reinicie o serviço Nginx para aplicar as mudanças.