Como o Ubuntu Server organiza o Nginx com sites-available e sites-enabled
Entenda como o Ubuntu Server organiza o Nginx usando sites-available e sites-enabled, como funcionam os includes no nginx.conf e por que os links simbólicos ativam os sites.
Como o Ubuntu Server organiza o Nginx com sites-available e sites-enabled
Quando você instala o Nginx no Ubuntu Server, uma das primeiras coisas que chama atenção é a organização dos arquivos de configuração. Em vez de colocar todos os sites diretamente dentro do arquivo principal do Nginx, o Ubuntu usa uma estrutura muito prática baseada em duas pastas:
/etc/nginx/sites-available//etc/nginx/sites-enabled/
À primeira vista, isso pode parecer só uma convenção do Ubuntu. E, de certa forma, é mesmo. Mas a ideia por trás dessa estrutura é muito boa: separar os sites que existem dos sites que estão realmente ativos.
O arquivo principal: /etc/nginx/nginx.conf
O ponto de partida do Nginx no Ubuntu é o arquivo:
/etc/nginx/nginx.conf
É nele que ficam as configurações globais do servidor web. Mas o mais importante, para entender a lógica do Ubuntu, está dentro do bloco http {}.
Normalmente, no final desse bloco, aparecem includes parecidos com estes:
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
Essas duas linhas são fundamentais.
A primeira:
include /etc/nginx/conf.d/*.conf;
manda o Nginx carregar todos os arquivos .conf dentro de /etc/nginx/conf.d/.
A segunda:
include /etc/nginx/sites-enabled/*;
manda o Nginx carregar tudo que estiver dentro de /etc/nginx/sites-enabled/.
É aqui que a mágica do Ubuntu acontece.
O que é o sites-available
A pasta:
/etc/nginx/sites-available/
guarda os arquivos de configuração dos sites disponíveis.
Pense nela como uma prateleira. Ali ficam os blocos server {} que você pode usar, mas que ainda não precisam estar ativos.
Por exemplo, você pode ter:
/etc/nginx/sites-available/meusite
/etc/nginx/sites-available/app
/etc/nginx/sites-available/blog
Cada arquivo pode conter um bloco como este:
server {
listen 80;
server_name exemplo.com www.exemplo.com;
root /var/www/exemplo;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Só que criar esse arquivo em sites-available não ativa o site automaticamente.
Ele está disponível, mas o Nginx ainda não vai carregá-lo.
O que é o sites-enabled
A pasta:
/etc/nginx/sites-enabled/
é a pasta que o Nginx realmente lê por causa deste include no /etc/nginx/nginx.conf:
include /etc/nginx/sites-enabled/*;
Ou seja: para o Nginx, o que importa mesmo é o que aparece dentro de sites-enabled.
Mas, em vez de copiar o arquivo de sites-available para sites-enabled, o Ubuntu usa links simbólicos.
O papel dos links simbólicos
Um link simbólico é como um atalho.
Você mantém o arquivo real em:
/etc/nginx/sites-available/meusite
E cria um link para ele em:
/etc/nginx/sites-enabled/meusite
Esse link aponta para o arquivo original.
A lógica é simples:
sites-availableguarda os sites configurados;sites-enabledaponta para os sites ativos;- o
nginx.confinclui tudo que está emsites-enabled; - então o Nginx carrega apenas os sites ativados.
Na prática, quando você cria um link simbólico, está dizendo:
“Esse site aqui, que já estava disponível, agora deve ser carregado pelo Nginx.”
E quando remove o link simbólico, você desativa o site sem apagar a configuração original.
Por que isso é tão útil?
Essa estrutura evita bagunça.
Imagine que você tem vários projetos no mesmo servidor: um blog em Django, uma aplicação Streamlit, uma landing page estática e talvez uma API.
Sem essa organização, você poderia acabar colocando vários blocos server {} diretamente no nginx.conf. Funcionaria, mas ficaria confuso rapidamente.
Com sites-available e sites-enabled, a lógica fica mais limpa:
/etc/nginx/sites-available/blog
/etc/nginx/sites-available/app
/etc/nginx/sites-available/landing-page
E você ativa apenas o que quiser:
/etc/nginx/sites-enabled/blog -> /etc/nginx/sites-available/blog
/etc/nginx/sites-enabled/app -> /etc/nginx/sites-available/app
O arquivo principal continua limpo, e cada site tem sua própria configuração.
O Nginx não “sabe” que existe sites-available
Esse ponto é importante.
O Nginx não tem uma funcionalidade especial chamada sites-available ou sites-enabled.
Quem cria essa lógica é a configuração do Ubuntu.
O Nginx só obedece ao que está no arquivo principal:
include /etc/nginx/sites-enabled/*;
Se essa linha não existisse em /etc/nginx/nginx.conf, a pasta sites-enabled não teria efeito nenhum.
E se você colocasse outro include, por exemplo:
include /home/saulo/nginx-sites-enabled/*;
o Nginx passaria a ler essa outra pasta, desde que tivesse permissão para isso.
A lógica é: o Nginx lê aquilo que o nginx.conf manda ele ler.
Dá para replicar isso em outras distribuições Linux?
Sim, em tese dá.
Algumas distribuições não usam sites-available e sites-enabled por padrão. Em muitas delas, a configuração fica mais concentrada em:
/etc/nginx/conf.d/
Mas nada impede que você crie uma estrutura parecida manualmente.
Por exemplo:
/etc/nginx/sites-available/
/etc/nginx/sites-enabled/
Depois, bastaria adicionar no bloco http {} do arquivo principal do Nginx a linha:
include /etc/nginx/sites-enabled/*;
A partir daí, você poderia usar a mesma lógica do Ubuntu: arquivos reais em sites-available e links simbólicos em sites-enabled.
Ou seja, não é uma “função mágica” do Ubuntu. É uma convenção bem montada usando recursos simples do Linux e do próprio Nginx.
A lógica humana por trás do processo
O raciocínio é bem natural.
Primeiro, você cria a configuração de um site. Nesse momento, ele está disponível, mas ainda não precisa estar ativo.
Depois, quando decide colocar esse site no ar, você cria um link simbólico em sites-enabled.
O Nginx, ao iniciar ou recarregar, lê o /etc/nginx/nginx.conf.
Dentro dele, encontra:
include /etc/nginx/sites-enabled/*;
Então ele carrega os arquivos apontados por essa pasta.
Se o link aponta para um arquivo em sites-available, o site entra na configuração final do Nginx.
É como se o Nginx perguntasse:
“Quais sites estão habilitados?”
E o diretório sites-enabled respondesse:
“Estes aqui.”
Conclusão
A estrutura sites-available e sites-enabled do Ubuntu Server é uma forma simples, elegante e organizada de administrar múltiplos sites no Nginx.
O arquivo principal fica em:
/etc/nginx/nginx.conf
E os includes mais importantes para essa lógica são:
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
O diretório sites-available guarda as configurações existentes. O sites-enabled guarda links simbólicos para as configurações que devem ser carregadas. E o Nginx só enxerga essa estrutura porque o nginx.conf manda ele incluir os arquivos de sites-enabled.
No fim das contas, entender isso muda a forma como você olha para o Nginx. Ele deixa de parecer uma caixa preta e passa a fazer muito mais sentido: existe um arquivo principal, existem includes, existem blocos server {} e existe uma decisão clara sobre o que está ativo ou não.
É Linux puro: arquivos, caminhos, links simbólicos e uma boa convenção fazendo o trabalho parecer mais organizado do que realmente é.