Tutorial de Linux / Instale Nginx e publique um site com HTTP e HTTPS

Publicar um site com Nginx exige alinhar caminhos dos arquivos, portas de escuta, firewall, DNS e TLS, além de instalar o pacote. Primeiro valide a página HTTP localmente; depois teste a conexão remota e o domínio, antes de configurar e verificar HTTPS.

Use o diagnóstico por camadas de rede para falhas de conexão e aplique a proteção de firewall e contas antes de expor serviços. As versões de Nginx e das ferramentas de certificado variam conforme os repositórios; consulte a documentação dos pacotes instalados e da distribuição.

As referências são VMs convencionais Ubuntu 26.04 LTS ou Rocky Linux 9. Contêineres, WSL e outras versões podem ter serviços e pacotes diferentes. Prepare a recuperação pelo console e registre as versões com a aula de configuração da máquina virtual, em inglês.

Prepare servidor, nome e política de acesso

Use um servidor de laboratório Ubuntu ou Rocky Linux com sudo e recuperação pelo console. linux-course.test é um nome de teste local, não um domínio a publicar no DNS público. Para publicação, substitua-o por um domínio real sob seu controle; em NAT, verifique encaminhamento de portas, endereço externo e restrições do provedor. Antes, confira se outro serviço já usa as portas 80 ou 443.

sudo ss -lntp
cat /etc/os-release

Instale o Nginx pelo pacote da distribuição

O primeiro bloco é para Ubuntu e o segundo para Rocky Linux. Examine as alterações de pacotes e siga a política de repositórios. Preserve sites existentes e acrescente um bloco de servidor separado, sem apagar indiscriminadamente a configuração padrão.

sudo apt update
sudo apt install nginx curl
sudo systemctl enable --now nginx
sudo dnf install nginx curl
sudo systemctl enable --now nginx

Crie uma raiz de documentos e um bloco completo

Antes de executar, inspecione /var/www/linux-course e /etc/nginx/conf.d/linux-course.conf. Os comandos seguintes podem sobrescrever o arquivo HTML e a configuração, além de alterar permissões; se houver conteúdo existente ou links simbólicos, faça backup e escolha caminhos novos, ajustando todas as referências. O exemplo presume que o nginx.conf do pacote inclua arquivos conf.d/*.conf; confirme a estrutura real quando ela for diferente.

sudo install -d -m 755 /var/www/linux-course
printf '<!doctype html><html lang="en"><meta charset="utf-8"><title>Linux course</title><h1>Linux course server works</h1></html>\n' | sudo tee /var/www/linux-course/index.html
sudo chmod 644 /var/www/linux-course/index.html
sudo tee /etc/nginx/conf.d/linux-course.conf > /dev/null <<'EOF'
server {
    listen 80;
    server_name linux-course.test;
    root /var/www/linux-course;
    index index.html;
    location / {
        try_files $uri $uri/ =404;
    }
}
EOF
sudo nginx -t

O h1 está na página HTML separada servida pelo laboratório, e não no corpo deste artigo. Execute o reload a seguir somente se nginx -t passar. Corrija o arquivo e a linha indicados e teste novamente, sem reiniciar um serviço funcional com configuração inválida.

sudo systemctl reload nginx
curl -i --resolve linux-course.test:80:127.0.0.1 http://linux-course.test/

Espere HTTP 200 e Linux course server works. --resolve associa nome e endereço apenas para essa requisição, sem alterar o DNS do sistema. Se aparecer a página padrão, confira o hostname solicitado, server_name e a configuração efetivamente carregada.

Separe acesso aos arquivos da exposição na rede

No Rocky Linux com SELinux ativo, examine os rótulos com ls -Zd /var/www/linux-course. Em caminho coberto pela política padrão, pode ser adequado usar sudo restorecon -Rv /var/www/linux-course; caminhos fora do padrão podem exigir regras persistentes de rotulagem. Não resolva HTTP 403 desativando SELinux ou aplicando permissão 777 a todo o caminho.

Após validar localmente, permita HTTP 80/tcp e, mais tarde, HTTPS 443/tcp no escopo necessário. No UFW, uma regra de porta específica pode ser adicionada; no firewalld, teste os serviços http/https na zona correta antes de tornar permanentes somente as regras pretendidas. Verifique separadamente o filtro da nuvem e preserve o acesso SSH.

De outro computador, faça uma requisição ao endereço real com curl -H "Host: linux-course.test" http://ENDERECO_REAL/ e confirme a mesma página. Se o acesso local funcionar e o remoto falhar, investigue escuta, filtros, rotas e NAT. Uma resposta HTTP 403, 404 ou 502 orienta a investigação para servidor, caminho ou aplicação.

Configure o domínio real e HTTPS

  1. Aponte os registros A e, quando aplicável, AAAA do domínio real para os endereços públicos pretendidos. Não publique um endereço IPv6 que não funcione.
  2. Substitua server_name, valide com nginx -t, recarregue e teste HTTP pelo domínio a partir de outra rede.
  3. Escolha sistema operacional e método para Nginx nas instruções oficiais do Certbot. No Ubuntu, o método por pacotes pode usar apt install certbot python3-certbot-nginx; em outras distribuições, confira antes os repositórios.
  4. Depois de confirmar controle do domínio e conectividade exigida, execute sudo certbot --nginx -d DOMINIO_REAL. O plugin pode alterar a configuração Nginx: faça backup, examine a proposta e preserve sites existentes.
  5. Verifique nome, cadeia e validade do certificado e redirecionamentos; teste a renovação com sudo certbot renew --dry-run.

Se a validação HTTP não estiver disponível, escolha outro método compatível, como validação DNS. Concluir o laboratório local não prova que DNS público e HTTPS estão prontos. Não envie senhas nem tokens durante o teste HTTP sem criptografia.

Investigue falhas e desfaça somente o laboratório

systemctl status nginx --no-pager
journalctl -b -u nginx -n 50 --no-pager
sudo nginx -t

Verifique também o caminho real do error_log e o horário da requisição. Para remover o exercício, faça backup e remova somente seu arquivo de configuração, valide e recarregue. Antes de limpar conteúdo, certificados, DNS e regras de firewall, examine as dependências e remova apenas o que foi criado para o exercício. Preserve sites existentes, certificados compartilhados e regras de administração SSH.

Referências oficiais