Aplicação Node.js com proxy reverso Nginx e SSL/HTTPS configurado para desenvolvimento local.
🔒 Site completamente seguro com certificados SSL confiáveis!
- ✅ HTTPS funcionando - Retorna HTTP/2 200
- ✅ Certificados confiáveis - Sem avisos de segurança no navegador
- ✅ Redirecionamento HTTP → HTTPS - Retorna 301
- ✅ Headers de segurança implementados e ativos
- ✅ Múltiplos domínios suportados
- ✅ Containers rodando de forma estável
- ✅ Compressão gzip ativa
- ✅ Protocolos TLS 1.2 e 1.3 configurados
- ✅ SSL/TLS com certificados confiáveis (mkcert)
- ✅ Redirecionamento automático HTTP → HTTPS
- ✅ Headers de segurança (HSTS, CSP, X-Frame-Options, etc.)
- ✅ Protocolos seguros TLS 1.2 e 1.3 apenas
- ✅ Compressão gzip habilitada
- ✅ Múltiplos domínios suportados
./setup-ssl.sh
./update-certificates.sh
Após executar o setup, acesse sua aplicação sem avisos de segurança:
- HTTPS: https://node-nginx.local ✅
- HTTPS: https://node-nginx.com ✅
- HTTPS: https://localhost ✅
- HTTP (redireciona): http://node-nginx.local:8080
Script | Descrição |
---|---|
setup-ssl.sh |
Configuração inicial completa - Instala mkcert, gera certificados, configura hosts |
update-certificates.sh |
Atualiza certificados - Regenera certificados para todos os domínios |
generate-certificate.sh |
Certificados básicos - Gera certificados auto-assinados simples |
O projeto usa mkcert
para gerar certificados SSL locais confiáveis:
# Instalar mkcert (feito automaticamente pelo setup-ssl.sh)
curl -JLO "https://dl.filippo.io/mkcert/latest?for=linux/amd64"
chmod +x mkcert-v*-linux-amd64
sudo mv mkcert-v*-linux-amd64 /usr/local/bin/mkcert
# Instalar CA local
mkcert -install
# Gerar certificados para todos os domínios
./update-certificates.sh
Todos os domínios abaixo funcionam com HTTPS sem avisos de segurança:
node-nginx.local
node-nginx.com
localhost
127.0.0.1
::1
(IPv6)
Os seguintes headers de segurança estão ativos:
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Referrer-Policy: strict-origin-when-cross-origin
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self';
# Ver logs de todos os serviços
docker compose logs -f
# Ver logs apenas do Nginx
docker compose logs -f nginx
# Parar todos os containers
docker compose down
# Reiniciar os serviços
docker compose restart
# Verificar status dos containers
docker compose ps
# Testar HTTPS (todos os domínios)
curl -I https://node-nginx.local
curl -I https://node-nginx.com
curl -I https://localhost
# Testar redirecionamento HTTP → HTTPS
curl -I http://node-nginx.local:8080
# Verificar certificados
openssl x509 -in certs/cert.pem -text -noout | grep -A 5 "Subject Alternative Name"
Cliente → HTTP:8080 → [Nginx Redirect] → HTTPS:443 → [SSL/Proxy] → Node.js:3000
- Node.js: Aplicação backend na porta 3000
- Nginx: Proxy reverso com SSL/TLS nas portas 8080 (HTTP) e 443 (HTTPS)
- Certificados SSL: Confiáveis gerados pelo mkcert
Serviço | Porta | Protocolo | Descrição |
---|---|---|---|
Node.js | 3000 | HTTP | Aplicação (interno) |
Nginx | 8080 | HTTP | Redirecionamento para HTTPS |
Nginx | 443 | HTTPS | Acesso seguro principal |
- Gerados por: mkcert (CA local confiável)
- Válidos até: 25 de setembro de 2027
- Sem avisos: Navegador não mostra avisos de segurança
node-nginx.local
node-nginx.com
localhost
127.0.0.1
::1
(IPv6)
- TLS 1.2 ✅
- TLS 1.3 ✅
- HTTP/2 ✅ (Ativo)
Se preferir configurar manualmente:
# Baixar e instalar mkcert
curl -JLO "https://dl.filippo.io/mkcert/latest?for=linux/amd64"
chmod +x mkcert-v*-linux-amd64
sudo mv mkcert-v*-linux-amd64 /usr/local/bin/mkcert
# Instalar suporte aos navegadores
sudo apt install libnss3-tools
# Instalar CA local
mkcert -install
mkcert -key-file certs/key.pem -cert-file certs/cert.pem \
node-nginx.local \
node-nginx.com \
localhost \
127.0.0.1 \
::1
echo "127.0.0.1 node-nginx.local" | sudo tee -a /etc/hosts
echo "127.0.0.1 node-nginx.com" | sudo tee -a /etc/hosts
docker compose up -d
- Reinicie completamente o navegador
- Limpe o cache SSL:
chrome://net-internals/#hsts
- Teste em janela privada/incógnita
- Verifique se mkcert está instalado:
mkcert -CAROOT
Se a porta 443 estiver em uso:
# Verificar qual processo está usando a porta
sudo netstat -tlnp | grep :443
# Parar Apache2 se necessário
sudo systemctl stop apache2
# Verificar se certificado tem todos os domínios
openssl x509 -in certs/cert.pem -text -noout | grep -A 5 "Subject Alternative Name"
# Verificar se mkcert CA está instalada
mkcert -CAROOT
# Ver logs detalhados
docker compose logs nginx
# Verificar configuração do Nginx
docker compose exec nginx nginx -t
- ✅ Use
mkcert
para certificados confiáveis locais - ✅ Execute
./update-certificates.sh
para atualizar certificados - ✅ Reinicie o navegador após instalar mkcert
- 🔄 Use Let's Encrypt com Certbot
- 🔄 Configure DNS real para os domínios
- 🔄 Use certificados de CA confiáveis
- Desenvolvimento: Tudo pronto! Use os domínios HTTPS sem avisos
- Produção: Migre para Let's Encrypt e domínios reais
- CI/CD: Configure pipelines para deploy automático