limit_req_zone $binary_remote_addr zone=api:10m rate=20r/s;
limit_conn_zone $binary_remote_addr zone=per_client:10m;
server_tokens off;
server {
    listen 80;
    server_name _;
    client_max_body_size 2m;
    client_body_timeout 15s;
    client_header_timeout 15s;
    limit_conn per_client 30;

    add_header X-Content-Type-Options nosniff always;
    add_header Referrer-Policy no-referrer always;
    add_header X-Frame-Options DENY always;
    add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;

    location ~ ^/health/(database|redis|ai|browser|readiness)$ {
        return 404;
    }
    location = /health {
        limit_req zone=api burst=40 nodelay;
        proxy_pass http://core-api:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Request-ID $request_id;
    }
    location ^~ /api/ {
        limit_req zone=api burst=40 nodelay;
        proxy_pass http://core-api:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Request-ID $request_id;
    }
    location / {
        proxy_pass http://web:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
