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.
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 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.
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
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.
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?
conseguiu a resposta?
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!
Obrigado pelo retorno. Ultimamente tenho usado mais o Apache, inclusive com criptografia SSH.
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.
`
checa o erro indicado no comando: systemctl status nginx.service