# /etc/nginx/sites-available/atm   (troque erp.exemplo.com.br e os caminhos)
# Ative:  ln -s /etc/nginx/sites-available/atm /etc/nginx/sites-enabled/atm && nginx -t && systemctl reload nginx
# Certificado:  certbot --nginx -d erp.exemplo.com.br   (renova sozinho)
#
# No .env do app:  HOST=127.0.0.1  TRUST_PROXY=1  FORCE_HTTPS=true  COOKIE_SECURE=true
# O HSTS já é enviado pelo próprio app (não repita aqui).

# Limites contra força bruta e abuso (zonas por IP)
limit_req_zone $binary_remote_addr zone=atm_login:10m rate=10r/m;
limit_req_zone $binary_remote_addr zone=atm_geral:10m rate=20r/s;

server {
    listen 80;
    listen [::]:80;
    server_name erp.exemplo.com.br;
    server_tokens off;

    location /.well-known/acme-challenge/ { root /var/www/certbot; }
    location / { return 301 https://$host$request_uri; }
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name erp.exemplo.com.br;
    server_tokens off;

    ssl_certificate     /etc/letsencrypt/live/erp.exemplo.com.br/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/erp.exemplo.com.br/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    client_max_body_size 12m;          # uploads de até 10 MB + formulário

    # nunca servir arquivos ocultos (.env, .git...) mesmo que apareçam na pasta pública
    location ~ /\.(?!well-known) { deny all; return 404; }

    # telas de login: no máximo ~10 requisições/min por IP (rajada de 10)
    location ~ ^/(login|verify-2fa|registro-ponto)$ {
        limit_req zone=atm_login burst=10 nodelay;
        include /etc/nginx/snippets/atm-proxy.conf;
    }

    # Socket.IO (WhatsApp / status em tempo real)
    location /socket.io/ {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        include /etc/nginx/snippets/atm-proxy.conf;
    }

    location / {
        limit_req zone=atm_geral burst=60 nodelay;
        include /etc/nginx/snippets/atm-proxy.conf;
    }
}

# /etc/nginx/snippets/atm-proxy.conf  (crie este arquivo com o conteúdo abaixo)
#   proxy_pass http://127.0.0.1:3010;
#   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;
#   proxy_read_timeout 120s;
