Nível: Iniciante → Intermediário • Formato: Teórico + Prático
Analista em T.I • DPL Construções • Community Contributor
Casado com Jucilene • Pai da Acsah Thuanny
Entusiasta de tecnologia e desenvolvedor de software, transformando ideias em código. Explorando o universo Python, automação e análise de dados. Profissional com mais de 7 anos de experiência em infraestrutura de TI, especializado em soluções de rede, servidores Linux e implementação de tecnologias.
Formação: Estudante de Análise e Desenvolvimento de Sistemas • Universidade Ceuma
Localização: Imperatriz, Maranhão, Brasil
Missão: "Transformar conhecimento técnico em crescimento profissional, explorando o universo da tecnologia com Python, automação e análise de dados."
O NGINX (pronuncia-se "engine X") é um servidor web de alta performance e proxy reverso de código aberto. Diferentemente do Apache, que usa um modelo de processamento baseado em threads (uma thread por conexão), o NGINX utiliza uma arquitetura event-driven (orientada a eventos) com um event loop não bloqueante.
Lê e valida o arquivo de configuração (nginx.conf), inicia, para e reinicia os processos worker, permite recarregar a configuração sem derrubar o serviço (reload sem downtime) e gerencia sinais do sistema operacional.
Processam as requisições HTTP/HTTPS, cada worker pode lidar com múltiplas conexões simultaneamente, normalmente o número de workers é igual ao número de núcleos de CPU (worker_processes auto;) e trabalham de forma independente.
Mecanismo que permite que cada worker aguarde eventos (novas conexões, dados chegando) sem bloquear. Usa sistemas operacionais eficientes como epoll (Linux), kqueue (BSD/macOS) ou IOCP (Windows). Permite que um único processo worker gerencie milhares de conexões.
Ideal para: Servir conteúdo estático com alta performance, proxy reverso para aplicações backend, balanceamento de carga entre múltiplos servidores, terminação TLS/SSL, cache de conteúdo e compressão, rate limiting e proteção contra ataques DDoS, roteamento de requisições baseado em domínio, caminho ou headers.
| Aspecto | NGINX | Apache |
|---|---|---|
| Modelo de processamento | Event-driven (assíncrono) | Thread-based (síncrono) |
| Consumo de memória | Baixo (~2-5 MB por worker) | Alto (~10-20 MB por thread) |
| Conexões simultâneas | 10.000+ facilmente | Limitado pelo número de threads |
| Performance estática | Excelente | Bom |
| Configuração | Simples e direta | Complexa (muitos módulos) |
Debian é uma distribuição Linux estável, segura e confiável, mantida por uma comunidade de voluntários. É uma das distribuições mais antigas e respeitadas do Linux, servindo como base para muitas outras (Ubuntu, Linux Mint, etc.).
Ciclo de lançamento longo (a cada 2-3 anos), versões antigas recebem suporte por 5+ anos, testes rigorosos antes de cada release, ideal para ambientes de produção onde downtime é crítico.
Equipe dedicada de segurança que publica patches rapidamente, repositórios oficiais contêm apenas software verificado, suporte de longa duração (LTS) para versões estáveis, comunidade ativa reportando e corrigindo vulnerabilidades.
Instalação base muito leve (sem bloatware), você instala apenas o que precisa, menos serviços desnecessários = menos superfície de ataque, ideal para VPS e servidores com recursos limitados.
NGINX está disponível nos repositórios oficiais do Debian, fácil instalação: apt install nginx, atualizações automáticas de segurança, comunidade grande de usuários NGINX no Debian.
O APT (Advanced Package Tool) é um sistema de pacotes robusto e confiável que resolve dependências automaticamente, facilita atualizar, remover ou instalar pacotes, e mantém repositórios bem organizados (main, contrib, non-free).
Debian é completamente gratuito e open-source, sem licenças proprietárias, ideal para startups e projetos com orçamento limitado.
| Distribuição | Estabilidade | Segurança | Comunidade | Ideal para |
|---|---|---|---|---|
| Debian | Excelente | Excelente | Muito grande | Servidores de produção |
| Ubuntu | Boa | Boa | Muito grande | Desktop e servidores |
| CentOS/RHEL | Excelente | Excelente | Grande | Empresas (pago) |
| Alpine | Boa | Boa | Pequena | Containers (Docker) |
SSL (Secure Sockets Layer) e TLS (Transport Layer Security) são protocolos que criptografam a comunicação entre o cliente (navegador) e o servidor (NGINX). Quando você acessa um site com https://, está usando TLS.
Diferença importante: SSL é a versão antiga (descontinuada desde 2015), TLS é a versão moderna e segura (1.2 e 1.3 são as atuais). Coloquialmente, ainda chamamos de "SSL" mesmo usando TLS.
Cliente conecta ao servidor na porta 443, servidor envia seu certificado (contém chave pública), cliente verifica se o certificado é válido e confiável, cliente e servidor negociam uma chave de sessão criptografada.
Todos os dados trocados são criptografados, apenas cliente e servidor conseguem descriptografar, protege contra espionagem (man-in-the-middle attacks).
O certificado prova que o servidor é quem diz ser, navegador verifica a assinatura do certificado contra autoridades confiáveis (CAs).
Let's Encrypt é uma autoridade certificadora (CA) gratuita, automatizada e aberta que emite certificados SSL/TLS válidos. Criada em 2016, revolucionou a segurança web ao tornar HTTPS acessível para todos.
Características: Gratuito (sem custos de certificado), automatizado (emissão e renovação automática), aberto (código-fonte disponível, sem restrições), confiável (reconhecido por todos os navegadores), válido por 90 dias (renovação automática antes do vencimento).
ACME (Automatic Certificate Management Environment) é um protocolo que automatiza a emissão e renovação de certificados. Let's Encrypt usa ACME para validar que você é o dono do domínio, emitir o certificado automaticamente e renovar antes do vencimento.
Certbot é um cliente ACME oficial mantido pela EFF (Electronic Frontier Foundation). Automatiza todo o processo: valida a propriedade do domínio, emite o certificado Let's Encrypt, configura o NGINX automaticamente e renova o certificado antes do vencimento.
Vantagens: Simples de usar (um comando), integração automática com NGINX, renovação automática via cron, suporta múltiplos domínios.
certbot --nginx -d seu-site.com| Aspecto | Let's Encrypt | Certificados pagos |
|---|---|---|
| Custo | Gratuito | $50-300/ano |
| Validação | Domain (DV) | Domain, Organization ou Extended |
| Validade | 90 dias | 1-3 anos |
| Renovação | Automática | Manual |
| Garantia | Não | Sim (até $10k) |
| Ideal para | Maioria dos sites | Grandes empresas |
Conclusão: Para 99% dos casos, Let's Encrypt é suficiente e recomendado.
server {
listen 443 ssl http2;
server_name seu-site.com;
# Certificados Let's Encrypt
ssl_certificate /etc/letsencrypt/live/seu-site.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/seu-site.com/privkey.pem;
# Protocolos seguros
ssl_protocols TLSv1.2 TLSv1.3;
# Ciphers fortes
ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384";
ssl_prefer_server_ciphers on;
# Segurança adicional
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
# Headers de segurança
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}
# Redirecionar HTTP para HTTPS
server {
listen 80;
server_name seu-site.com;
return 301 https://$host$request_uri;
}
apt update && apt full-upgrade -y
apt install sudo
apt install nginx
apt install python3-certbot-nginx certbot
cd /etc/nginx/sites-enabled/
rm default
cd /etc/nginx/sites-available/
rm default
sudo nginx -t
sudo systemctl start nginx
sudo systemctl status nginx
curl -I http://localhost
nginx -v
sudo nginx -t
# Via Terminal MikroTik:
# NAT para porta 80 (HTTP)
/ip firewall nat
add action=dst-nat chain=dstnat dst-port=80 protocol=tcp to-addresses=192.168.1.200 to-ports=80
# NAT para porta 443 (HTTPS)
/ip firewall nat
add action=dst-nat chain=dstnat dst-port=443 protocol=tcp to-addresses=192.168.1.200 to-ports=443
# Permitir tráfego HTTP/HTTPS para o servidor NGINX
/ip firewall filter
# Permitir HTTP (porta 80) para o servidor
add action=accept chain=forward dst-address=192.168.1.200 dst-port=80 protocol=tcp
# Permitir HTTPS (porta 443) para o servidor
add action=accept chain=forward dst-address=192.168.1.200 dst-port=443 protocol=tcp
# Permitir respostas de conexões estabelecidas
add action=accept chain=forward connection-state=established,related
| Serviço | Porta Externa | Porta Interna | IP Destino | Protocolo |
|---|---|---|---|---|
| HTTP | 80 | 80 | 192.168.1.200 | TCP |
| HTTPS | 443 | 443 | 192.168.1.200 | TCP |
sudo nano /etc/nginx/sites-available/nginxconf
server {
listen 80;
# listen [::]:80; # Descomente se tiver IPv6
server_name nginxconf.dpl.srv.br; # Substitua pelo seu domínio
}
sudo ln -s /etc/nginx/sites-available/nginxconf /etc/nginx/sites-enabled/
sudo nginx -t
systemctl restart nginx.service
sudo systemctl status nginx
cd /etc/nginx/sites-available/
ls -la
sudo certbot --nginx -d nginxconf.dpl.srv.br
systemctl restart nginx.service
sudo systemctl status nginx
sudo nano /etc/nginx/sites-available/nginxconf
server {
listen 443 ssl http2;
# OBS: Ajuste todos os server_name de acordo com seu domínio
server_name nginxconf.dpl.srv.br;
ssl_certificate /etc/letsencrypt/live/nginxconf.dpl.srv.br/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/nginxconf.dpl.srv.br/privkey.pem; # managed by Certbot
# Configurações de SSL/TLS
ssl_protocols TLSv1.2 TLSv1.3;
# OBS: Obtenha a ssl_ciphers atualizada em https://ssl-config.mozilla.org/
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
ssl_ecdh_curve X25519:P-256:P-384:P-521;
# Configurações de sessão SSL
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
# Tamanho máximo de upload (ajuste conforme necessário)
client_max_body_size 100M;
# Headers de segurança
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options nosniff always;
add_header X-Frame-Options DENY always;
add_header X-XSS-Protection "1; mode=block" always;
location / {
# OBS: Ajustar o proxy_pass de acordo com o IP do servidor
proxy_pass http://192.168.1.210:8080/;
proxy_http_version 1.1;
# Headers para WebSocket e conexões upgrade
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Headers padrão do proxy
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Timeouts
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
server {
listen 80;
server_name nginxconf.dpl.srv.br;
return 301 https://$host$request_uri; # Redireciona HTTP para HTTPS
}
sudo nginx -t
systemctl restart nginx.service
sudo systemctl status nginx
# Testar SSL
curl -I https://nginxconf.dpl.srv.br
# Verificar certificado
openssl s_client -connect nginxconf.dpl.srv.br:443 -servername nginxconf.dpl.srv.br
# Testar renovação
certbot renew
# Adicionar ao crontab para renovação automática
echo '00 00 1 * * root certbot renew -q' >> /etc/crontab
# Reiniciar e verificar cron
systemctl restart cron
systemctl status cron
# Verificar crontab
cat /etc/crontab
# Verificar logs do cron
tail -f /var/log/cron.log
Acesse seu domínio e verifique:
curl -I https://seu-dominio.comLembre-se: 80/443 expostas ao público via MikroTik (DST-NAT + filtros) apontando para o NGINX.