Como o Ubuntu Server organiza o Nginx com sites-available e sites-enabled

Como o Ubuntu Server organiza o Nginx com sites-available e sites-enabled

Publicado em 01/07/2026 · Linux Services

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-available guarda os sites configurados;
  • sites-enabled aponta para os sites ativos;
  • o nginx.conf inclui tudo que está em sites-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 é.