{"id":26891173,"url":"https://github.com/williamkoller/node-nginx","last_synced_at":"2026-03-13T15:32:34.337Z","repository":{"id":285196276,"uuid":"957279231","full_name":"williamkoller/node-nginx","owner":"williamkoller","description":"Node + Nginx","archived":false,"fork":false,"pushed_at":"2025-06-25T19:54:29.000Z","size":11,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-25T20:33:39.913Z","etag":null,"topics":["https","nginx","nodejs","ssl-certificates"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/williamkoller.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-30T00:59:27.000Z","updated_at":"2025-06-25T19:54:33.000Z","dependencies_parsed_at":"2025-03-30T10:15:21.317Z","dependency_job_id":null,"html_url":"https://github.com/williamkoller/node-nginx","commit_stats":null,"previous_names":["williamkoller/node-nginx"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/williamkoller/node-nginx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/williamkoller%2Fnode-nginx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/williamkoller%2Fnode-nginx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/williamkoller%2Fnode-nginx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/williamkoller%2Fnode-nginx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/williamkoller","download_url":"https://codeload.github.com/williamkoller/node-nginx/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/williamkoller%2Fnode-nginx/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30469312,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-13T11:00:43.441Z","status":"ssl_error","status_checked_at":"2026-03-13T11:00:23.173Z","response_time":60,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["https","nginx","nodejs","ssl-certificates"],"created_at":"2025-03-31T22:33:08.662Z","updated_at":"2026-03-13T15:32:34.327Z","avatar_url":"https://github.com/williamkoller.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Node.js + Nginx com SSL/HTTPS\n\nAplicação Node.js com proxy reverso Nginx e SSL/HTTPS configurado para desenvolvimento local.\n\n## ✅ Status da Implementação\n\n**🔒 Site completamente seguro com certificados SSL confiáveis!**\n\n### 🧪 Testes Realizados com Sucesso:\n\n- ✅ **HTTPS funcionando** - Retorna HTTP/2 200\n- ✅ **Certificados confiáveis** - Sem avisos de segurança no navegador\n- ✅ **Redirecionamento HTTP → HTTPS** - Retorna 301\n- ✅ **Headers de segurança** implementados e ativos\n- ✅ **Múltiplos domínios** suportados\n- ✅ **Containers rodando** de forma estável\n- ✅ **Compressão gzip** ativa\n- ✅ **Protocolos TLS 1.2 e 1.3** configurados\n\n## 🔒 Recursos de Segurança\n\n- ✅ **SSL/TLS** com certificados confiáveis (mkcert)\n- ✅ **Redirecionamento automático** HTTP → HTTPS\n- ✅ **Headers de segurança** (HSTS, CSP, X-Frame-Options, etc.)\n- ✅ **Protocolos seguros** TLS 1.2 e 1.3 apenas\n- ✅ **Compressão gzip** habilitada\n- ✅ **Múltiplos domínios** suportados\n\n## 🚀 Configuração Rápida\n\n### Opção 1: Configuração Completa (Recomendada)\n\n```bash\n./setup-ssl.sh\n```\n\n### Opção 2: Atualizar Certificados\n\n```bash\n./update-certificates.sh\n```\n\n## 📱 Como Acessar\n\nApós executar o setup, acesse sua aplicação **sem avisos de segurança**:\n\n- **HTTPS**: https://node-nginx.local ✅\n- **HTTPS**: https://node-nginx.com ✅\n- **HTTPS**: https://localhost ✅\n- **HTTP (redireciona)**: http://node-nginx.local:8080\n\n## 🛠️ Scripts Disponíveis\n\n| Script                    | Descrição                                                                              |\n| ------------------------- | -------------------------------------------------------------------------------------- |\n| `setup-ssl.sh`            | **Configuração inicial completa** - Instala mkcert, gera certificados, configura hosts |\n| `update-certificates.sh`  | **Atualiza certificados** - Regenera certificados para todos os domínios               |\n| `generate-certificate.sh` | **Certificados básicos** - Gera certificados auto-assinados simples                    |\n\n### 🔐 Certificados Confiáveis com mkcert\n\nO projeto usa `mkcert` para gerar certificados SSL locais confiáveis:\n\n```bash\n# Instalar mkcert (feito automaticamente pelo setup-ssl.sh)\ncurl -JLO \"https://dl.filippo.io/mkcert/latest?for=linux/amd64\"\nchmod +x mkcert-v*-linux-amd64\nsudo mv mkcert-v*-linux-amd64 /usr/local/bin/mkcert\n\n# Instalar CA local\nmkcert -install\n\n# Gerar certificados para todos os domínios\n./update-certificates.sh\n```\n\n## 🌐 Domínios Suportados\n\nTodos os domínios abaixo funcionam com HTTPS sem avisos de segurança:\n\n- `node-nginx.local`\n- `node-nginx.com`\n- `localhost`\n- `127.0.0.1`\n- `::1` (IPv6)\n\n## 🛡️ Headers de Segurança Implementados\n\nOs seguintes headers de segurança estão ativos:\n\n```http\nStrict-Transport-Security: max-age=31536000; includeSubDomains\nX-Content-Type-Options: nosniff\nX-Frame-Options: DENY\nX-XSS-Protection: 1; mode=block\nReferrer-Policy: strict-origin-when-cross-origin\nContent-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self';\n```\n\n## 🔧 Comandos Úteis\n\n```bash\n# Ver logs de todos os serviços\ndocker compose logs -f\n\n# Ver logs apenas do Nginx\ndocker compose logs -f nginx\n\n# Parar todos os containers\ndocker compose down\n\n# Reiniciar os serviços\ndocker compose restart\n\n# Verificar status dos containers\ndocker compose ps\n\n# Testar HTTPS (todos os domínios)\ncurl -I https://node-nginx.local\ncurl -I https://node-nginx.com\ncurl -I https://localhost\n\n# Testar redirecionamento HTTP → HTTPS\ncurl -I http://node-nginx.local:8080\n\n# Verificar certificados\nopenssl x509 -in certs/cert.pem -text -noout | grep -A 5 \"Subject Alternative Name\"\n```\n\n## 🏗️ Arquitetura\n\n```\nCliente → HTTP:8080 → [Nginx Redirect] → HTTPS:443 → [SSL/Proxy] → Node.js:3000\n```\n\n### Componentes:\n\n- **Node.js**: Aplicação backend na porta 3000\n- **Nginx**: Proxy reverso com SSL/TLS nas portas 8080 (HTTP) e 443 (HTTPS)\n- **Certificados SSL**: Confiáveis gerados pelo mkcert\n\n## 📋 Portas Utilizadas\n\n| Serviço | Porta | Protocolo | Descrição                   |\n| ------- | ----- | --------- | --------------------------- |\n| Node.js | 3000  | HTTP      | Aplicação (interno)         |\n| Nginx   | 8080  | HTTP      | Redirecionamento para HTTPS |\n| Nginx   | 443   | HTTPS     | Acesso seguro principal     |\n\n## 🔐 Configuração SSL\n\n### Certificados Confiáveis:\n\n- **Gerados por**: mkcert (CA local confiável)\n- **Válidos até**: 25 de setembro de 2027\n- **Sem avisos**: Navegador não mostra avisos de segurança\n\n### Domínios no Certificado:\n\n- `node-nginx.local`\n- `node-nginx.com`\n- `localhost`\n- `127.0.0.1`\n- `::1` (IPv6)\n\n### Protocolos SSL/TLS:\n\n- **TLS 1.2** ✅\n- **TLS 1.3** ✅\n- **HTTP/2** ✅ (Ativo)\n\n## 🛠️ Configuração Manual\n\nSe preferir configurar manualmente:\n\n### 1. Instalar mkcert\n\n```bash\n# Baixar e instalar mkcert\ncurl -JLO \"https://dl.filippo.io/mkcert/latest?for=linux/amd64\"\nchmod +x mkcert-v*-linux-amd64\nsudo mv mkcert-v*-linux-amd64 /usr/local/bin/mkcert\n\n# Instalar suporte aos navegadores\nsudo apt install libnss3-tools\n\n# Instalar CA local\nmkcert -install\n```\n\n### 2. Gerar Certificados\n\n```bash\nmkcert -key-file certs/key.pem -cert-file certs/cert.pem \\\n    node-nginx.local \\\n    node-nginx.com \\\n    localhost \\\n    127.0.0.1 \\\n    ::1\n```\n\n### 3. Configurar /etc/hosts\n\n```bash\necho \"127.0.0.1 node-nginx.local\" | sudo tee -a /etc/hosts\necho \"127.0.0.1 node-nginx.com\" | sudo tee -a /etc/hosts\n```\n\n### 4. Iniciar Containers\n\n```bash\ndocker compose up -d\n```\n\n## 🔍 Troubleshooting\n\n### Ainda aparece aviso de segurança\n\n1. **Reinicie completamente o navegador**\n2. **Limpe o cache SSL**: `chrome://net-internals/#hsts`\n3. **Teste em janela privada/incógnita**\n4. **Verifique se mkcert está instalado**: `mkcert -CAROOT`\n\n### Erro \"Porta em uso\"\n\nSe a porta 443 estiver em uso:\n\n```bash\n# Verificar qual processo está usando a porta\nsudo netstat -tlnp | grep :443\n\n# Parar Apache2 se necessário\nsudo systemctl stop apache2\n```\n\n### Certificado não aceito\n\n```bash\n# Verificar se certificado tem todos os domínios\nopenssl x509 -in certs/cert.pem -text -noout | grep -A 5 \"Subject Alternative Name\"\n\n# Verificar se mkcert CA está instalada\nmkcert -CAROOT\n```\n\n### Container não inicia\n\n```bash\n# Ver logs detalhados\ndocker compose logs nginx\n\n# Verificar configuração do Nginx\ndocker compose exec nginx nginx -t\n```\n\n## 💡 Dicas Importantes\n\n### Para Desenvolvimento:\n\n- ✅ Use `mkcert` para certificados confiáveis locais\n- ✅ Execute `./update-certificates.sh` para atualizar certificados\n- ✅ Reinicie o navegador após instalar mkcert\n\n### Para Produção:\n\n- 🔄 Use Let's Encrypt com Certbot\n- 🔄 Configure DNS real para os domínios\n- 🔄 Use certificados de CA confiáveis\n\n## 🎯 Próximos Passos\n\n1. **Desenvolvimento**: Tudo pronto! Use os domínios HTTPS sem avisos\n2. **Produção**: Migre para Let's Encrypt e domínios reais\n3. **CI/CD**: Configure pipelines para deploy automático\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilliamkoller%2Fnode-nginx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwilliamkoller%2Fnode-nginx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilliamkoller%2Fnode-nginx/lists"}