nginx logo

Servidor Nginx com vários domínios

Neste tutorial vamos ver como configurar o servidor web Nginx para trabalhar localmente com vários domínios em diferentes projetos.

Os comandos são até relativamente fáceis de encontrar em tutoriais pela internet, mas a maioria ou é muito abrangente, querendo ser um manual completo, ou não tem clareza, por não explicar bem os comandos. Sei que conforme dominamos alguma técnica, as coisas básicas se tornam obvias e não é dado tanta atenção a elas. No entanto, com este tutorial, qualquer um que já tenha instalado o LEMP poderá seguir esses passos, mesmo sem muita experiência. Para instalar o LEMP tem um tutorial aqui explicando de uma forma simples e objetiva como fazer usando o Debian 10 Buster.

Pré-requisitos

Este tutorial foi feito usando o Debian 10 Buster. O Debian é um distribuição linux robusta e estável que serve de base para algumas das distribuições mais conhecidas do mundo linux como Ubuntu. Portanto, este tutorial pode servir sem maiores problemas para todas estas distribuições e eventualmente para outras baseadas em Arq linux ou da ‘familia’ Fedora. No Windows e Mac as coisas costumam ser bem diferentes.

Partimos do principio que o Nginx esteja previamente instalado, obviamente. Não esquecendo que o abjetivo aqui é que o Nginx responda a requisições locais de diferentes domínios para trabalharmos com vários projetos simultaneos em nossa máquina local.

Localização da instalação do Nginx no Debian 10 Buster

As pastas que iremos trabalhar fica localizadas em dois lugares básicos:

/etc/nginx/
          /sites-enabled/
          /sites-available/

/var/www/html/

O primeiro é o diretório básico de instalação /etc/nginx/ , onde está localizado todos os parâmetros de configuração da aplicação. Nós praticamente só vamos mexer dentro do sites-available para fazer toda a nossa configuração, que nem é tanta assim.

Localização da instalação do servidor Nginx no Debian 10 Buster

O outro diretório /var/www/ , é onde vamos criar as pasta de trabalho para nossas aplicações. Os arquivos de configuração precisam relacionar o domínio (local ou externo) de cada projeto com a sua respectiva pasta de trabalho.

Criar os diretórios de trabalho

A diretório de trabalho é onde vão ficar os arquivos que você vai estar criando e programando diariamente neles. Poderemos ter vários, mas vamos exemplificar com 2:

/var/www/projeto-um.test
/var/www/projeto-dois.test

A pasta /var/www/html/ é a pasta padrão do Nginx. A pagina inicial que aparece no navegador está dentro desse diretório, no arquivo index.html. Vou deixar a configuração inicial e padrão intacta para ser mais simples, mas com os principios aqui aprendidos você poderá alterar o localhost também.

Primeiro vamos criar o diretório onde vão ficar os arquivos do projeto:

sudo mkdir -p /var/www/projeto-um.test/public_html

Depois vamos mudar o dono do aquivo para poder trabalhar neles sem precisar ser root.

sudo chown -R $USER:$USER /var/www/projeto-um.test/

Agora você pode trabalhar dentro do diretório criado até mesmo pelo explorador de arquivos de sua preferencia.

Criar os diretórios de trabalho que o servidor nginx aponta

Criar o arquivo de configuração dos dominios adicionais no Nginx

Aqui é onde vamos dizer para o servidor web o nome do nosso domínio e o lugar que estão os arquivos quando esse domínio é requisitado.

Vamos criar um arquivo que pode ter qualquer nome, mas para facilitar a nossa vida, vamos dar a ele o mesmo nome do domínio, assim fica fácil fazermos a manutenção quando tivermos vários projetos.

Criamos o arquivo com o comando a seguir:

sudo nano /etc/nginx/sites-available/projeto-um.test

O conteúdo desse arquivo pode ser facilmente entendido. Este é o conteúdo do arquivo:

server {
     listen 80;
     listen [::]:80;
     server_name projeto-um.teste www.projeto-um.teste;

     root /var/www/projeto-um.teste/public_html;

     index index.html index.htm;

     location / {
          try_files $uri $uri/ =404;
     }
}

Entendendo o arquivo

listen 80; informa a porta que estamos trabalhando, no caso a 80;
a segunda linha é o mesmo que a anterior só que para ipv6 (listen [::]:80).

server_name é onde fica o nome do dominio.

Em root colocamos a localização real da pasta onde está o nosso projeto.

A frente de index colocamos o arquivo a ser lido quando digitamos apenas o endereço no navegador.

Criar o arquivo de configuração dos dominios adicionais no Nginx

Você não deve mexer em mais nada neste arquivo. Salve seu arquivo e saia do editor.

Validar o novo domínio no servidor Nginx

O nosso arquivo esta pronto para ‘rodar’ no servidor, mas antes precisamos verificar se ao executar ele vai funcionar. Digite no terminal o seguinte comando:

sudo nginx -t -c /etc/nginx/sites-available/projeto-um.teste

Se ele passar no teste e estiver tudo certo, vamos ‘validar’ esse arquivo no servidor web Nginx. Para isso basta criar um link para esse arquivo na pasta sites-enabled, ou seja, criamos um link na pasta /etc/nginx/sites-enabled apontado para o arquivo que criamos na pasta /etc/nginx/sites-available com o seguinte comando:

sudo ln -s /etc/nginx/sites-available/projeto-um.teste /etc/nginx/sites-enabled/projeto-um.teste

ln é o comando linux para criar um hard-link, o -s torna esse link simbólico depois vem a localização do arquivo original e por fim o diretório onde vai ser criado o link.

Reiniciar o servidor web Nginx para rodar com a nova configuração

Agora é só reiniciar o servidor web Nginx para que as novas configurações estejam valendo. O comando é o seguinte:

sudo systemctl reload nginx

É importante sempre testar o servidor para ver para ter certeza que esta tudo funcionando como deveria.

sudo systemctl status nginx

Adicionar o domínio ao host local

Ainda não acontece nada se digitar o dominio do exemplo em seu navegador. Ainda é preciso dizer para o seu computador, que quando for digitado o dominio de exemplo – projeto-um.teste – não é para procurar na internet mas sim no servidor web da sua maquina local.

Para isso vamos editar o arquivo /etc/hosts .

sudo nano /etc/hosts

Nesse arquivo é preciso acrescentar no final a linha:

127.0.0.1         projeto-um.test
adicionar o dominio ao host para redirecionar para o servidor Nginx

Depois de gravar o arquivo, o seu ambiente web estará pronto.

Para ver o se o servidor realmente está funcionado como esperado e apontando para a pasta certa, abra o navegar e digite o dominio local desejado, no nosso exemplo projeto-um.test .

Agora é só voltar ao começo e fazer tudo novamente com o projeto-dois.test . Claro que poderá fazer com seus próprios domínios locais de desenvolvimento. Lembre-se, quanto quanto mais praticar, melhor vai ficar e os processos vão ficar na sua cabeça.

Encontrei um artigo em ingles, bem completo, mostrando o que fazer desde a configuração inicial até a configuração dos dominios adicionais. Você pode conferir no artigo How to configure Multiple Domains with Nginx on Ubuntu de Shane Rainville.

OBS. Este artigo não é uma cópia ou tradução do arquivo citado, mas quando comecei a usar Nginx em vez de Apache, este foi um dos que consultei para aprendizado e compartilhei, porque é relacionado o propósito deste post e complementa as informações para quem quer se aprofundar um pouco mais.

Publicado por

Lisanias Loback

Pastor na Igreja Casa de Oração Para Todos os Povos, trabalhando na área social no NUSELON - Núcleo Social Evangélico de Londrina, uma ONG que cuida de crianças em situação de riscos. Atua na área de ensino teológico e na área de TI. É formado em Teologia pela UNIFIL e é técnico em contabilidade.

7 comentários em “Servidor Nginx com vários domínios”

  1. uai, pastor, bora trocar umas ideias! hehehe Gostei do seu tutorial, porém, como faço para adicionar outros sites? ex: um site principal já está funcional, inclusive consigo acessar ele… e está dentro do diretório /var/www/html/meusite1 e queria colocar outro (com outro domínio) /var/www/html/meusite2, como seria? faço uma cópia do arquivo do meusite1, criando um meusite2 e altero, apontando para a pasta dele e já funciona? É claro que deve ser ajustado o DNS, etc… mas, provisoriamente, pra rodar pelo IP, para fazer os ajustes antes de colocar “no ar”, seria assim?

      1. Bom dia! Boa tarde! Boa noite!
        Resolvi, sim…
        Eu consegui entender como o NGinx trabalha e aos poucos vou aprendendo ele, mas seu tutorial foi fundamental.
        Qualquer dúvida eu falo contigo, mas se quiser me achar mais rápido, me procure no telegram. (lá eu estou como @nettux).
        Grato e abração!

  2. Oi, você poderia me ajudar? Na hora de reiniciar o servidor ele me retorna :

    `
    sudo systemctl reload nginx
    Job for nginx.service failed.
    See “systemctl status nginx.service” and “journalctl -xe” for details.

    `

Nos encoraje deixando seu comentário aqui.