178 lines
4.5 KiB
Markdown
178 lines
4.5 KiB
Markdown
# NGINX Pathfinder Proxy - Documentação da Estrutura
|
|
|
|
## Visão Geral
|
|
|
|
Este projeto é um proxy reverso NGINX containerizado com suporte a:
|
|
- **HTTP/3 (QUIC)** - Protocolo moderno para melhor performance
|
|
- **Brotli** - Compressão avançada para menor uso de banda
|
|
- **High Availability** - Restart automático e cache stale
|
|
- **Validação Automática** - Verificação de DNS e SSL no startup
|
|
|
|
---
|
|
|
|
## Estrutura de Pastas
|
|
|
|
```
|
|
.
|
|
├── conf.d/ # Configurações de sites (carregadas automaticamente)
|
|
├── snippets/ # Trechos reutilizáveis de configuração
|
|
├── scripts/ # Scripts auxiliares (pre-flight.sh)
|
|
├── ssl/ # Certificados SSL/TLS
|
|
├── legacy/ # Arquivos antigos do servidor original
|
|
├── .gemini/ # Documentação do projeto
|
|
├── Dockerfile # Build customizado do NGINX
|
|
├── docker-compose.yml # Orquestração do container
|
|
├── nginx.conf # Configuração principal do NGINX
|
|
└── deploy.sh # Script de deploy automatizado
|
|
```
|
|
|
|
---
|
|
|
|
## Arquivos Principais
|
|
|
|
### `Dockerfile`
|
|
Constrói uma imagem NGINX customizada baseada em Alpine Linux com:
|
|
- Módulo Brotli (compressão)
|
|
- Módulo headers_more (manipulação de headers)
|
|
- Ferramentas de diagnóstico (dig, openssl, curl)
|
|
|
|
### `docker-compose.yml`
|
|
Orquestra o container com:
|
|
- **Portas**: 80 (HTTP), 443 (HTTPS), 443/udp (HTTP/3)
|
|
- **Volumes**: conf.d, ssl, snippets, cache, logs
|
|
- **Restart**: always (alta disponibilidade)
|
|
- **Variável**: HOST_PUBLIC_IP (injetada pelo deploy.sh)
|
|
|
|
### `nginx.conf`
|
|
Configuração principal que:
|
|
- Carrega os módulos (Brotli, headers_more)
|
|
- Inclui snippets do `/etc/nginx/snippets/`
|
|
- Inclui sites do `/etc/nginx/conf.d/`
|
|
|
|
### `deploy.sh`
|
|
Script de deploy que:
|
|
1. Detecta o IP público do servidor
|
|
2. Grava no `.env`
|
|
3. Build da imagem Docker
|
|
4. Testa configuração com `nginx -t`
|
|
5. Inicia o container
|
|
|
|
---
|
|
|
|
## Pasta `snippets/`
|
|
|
|
Contém configurações reutilizáveis incluídas no `nginx.conf`:
|
|
|
|
| Arquivo | Função |
|
|
|---------|--------|
|
|
| `rate_limit.conf` | Define zonas de rate limiting |
|
|
| `security_maps.conf` | Maps para detecção de bots e IPs internos |
|
|
| `log_formats.conf` | Formato JSON detalhado para logs |
|
|
| `cache_zones.conf` | Define todas as zonas de cache |
|
|
| `custom_errors.conf` | Páginas de erro customizadas |
|
|
|
|
---
|
|
|
|
## Pasta `conf.d/`
|
|
|
|
Contém configurações individuais de cada site/sistema. Cada arquivo `.conf` representa um virtual host.
|
|
|
|
**Padrão de nomenclatura**: `dominio.conf` (ex: `itguys.com.br.conf`)
|
|
|
|
**Estrutura típica de um site**:
|
|
```nginx
|
|
upstream nome_backend {
|
|
server IP:PORTA;
|
|
}
|
|
|
|
server {
|
|
listen 80;
|
|
server_name dominio.com;
|
|
return 301 https://$host$request_uri;
|
|
}
|
|
|
|
server {
|
|
listen 443 ssl;
|
|
http2 on;
|
|
server_name dominio.com;
|
|
|
|
ssl_certificate /etc/letsencrypt/live/dominio.com/fullchain.pem;
|
|
ssl_certificate_key /etc/letsencrypt/live/dominio.com/privkey.pem;
|
|
|
|
proxy_cache STATIC;
|
|
proxy_cache_use_stale error timeout;
|
|
|
|
location / {
|
|
proxy_pass http://nome_backend;
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Pasta `scripts/`
|
|
|
|
### `pre-flight.sh`
|
|
Script executado ANTES do NGINX iniciar. Valida:
|
|
- Se `HOST_PUBLIC_IP` está definida
|
|
- Se os domínios configurados apontam para o IP correto
|
|
- Logs de warning se houver inconsistências
|
|
|
|
---
|
|
|
|
## Pasta `legacy/`
|
|
|
|
Contém arquivos do servidor original (synced via proxy-sinc). **Não são usados diretamente** - servem como referência.
|
|
|
|
---
|
|
|
|
## Fluxo de Deploy
|
|
|
|
```mermaid
|
|
graph LR
|
|
A[deploy.sh] --> B[Detecta IP]
|
|
B --> C[Gera .env]
|
|
C --> D[Docker Build]
|
|
D --> E[nginx -t]
|
|
E --> F[Docker Up]
|
|
F --> G[pre-flight.sh]
|
|
G --> H[NGINX Start]
|
|
```
|
|
|
|
---
|
|
|
|
## Variáveis de Ambiente
|
|
|
|
| Variável | Descrição |
|
|
|----------|-----------|
|
|
| `HOST_PUBLIC_IP` | IP público do servidor (detectado automaticamente) |
|
|
|
|
---
|
|
|
|
## Comandos Úteis
|
|
|
|
```bash
|
|
# Deploy completo
|
|
./deploy.sh
|
|
|
|
# Rebuild após alterações
|
|
docker compose build && docker compose up -d
|
|
|
|
# Testar configuração
|
|
docker compose run --rm nginx-proxy nginx -t
|
|
|
|
# Ver logs
|
|
docker compose logs -f
|
|
|
|
# Recarregar configuração sem restart
|
|
docker compose exec nginx-proxy nginx -s reload
|
|
```
|
|
|
|
---
|
|
|
|
## Notas Importantes
|
|
|
|
1. **SSL**: Os certificados devem estar em `/etc/letsencrypt/` no host ou montados via volume
|
|
2. **ModSecurity**: Alguns sites usam WAF que requer módulo adicional (não incluído por padrão)
|
|
3. **HTTP/2**: O formato antigo `listen 443 ssl http2` está deprecated, usar `http2 on;` separado
|