{
  "configurations": [
    {
      "config": "abuse_guard_zone zone=minimal:1m;",
      "directive": "abuse_guard_zone",
      "nginx_t_status": "passed",
      "slug": "minimal-zone",
      "title": "Minimal zone"
    },
    {
      "config": "abuse_guard_zone zone=basic:1m key=$binary_remote_addr statuses=403,404 interval=5s threshold=3 block=2s;",
      "directive": "abuse_guard_zone",
      "nginx_t_status": "passed",
      "slug": "explicit-basic-zone",
      "title": "Explicit statuses"
    },
    {
      "config": "abuse_guard_zone zone=weighted:1m key=$arg_client statuses=404,401:5 interval=30s threshold=6 block=30s;",
      "directive": "abuse_guard_zone",
      "nginx_t_status": "passed",
      "slug": "weighted-status-zone",
      "title": "Weighted statuses"
    },
    {
      "config": "abuse_guard_zone zone=ranged:1m key=$binary_remote_addr statuses=400-499:2,500-502:3 interval=30s threshold=6 block=30s;",
      "directive": "abuse_guard_zone",
      "nginx_t_status": "passed",
      "slug": "range-status-zone",
      "title": "Status range"
    },
    {
      "config": "abuse_guard_zone zone=inactive:1m key=$binary_remote_addr statuses=404 interval=5s threshold=3 block=2s inactive=10s;",
      "directive": "abuse_guard_zone",
      "nginx_t_status": "passed",
      "slug": "inactive-zone",
      "title": "Inactive expiry"
    },
    {
      "config": "abuse_guard_zone zone=persist:1m key=$binary_remote_addr statuses=404 interval=5s threshold=3 block=2s persist=/var/lib/nginx/abuse-guard.state;",
      "directive": "abuse_guard_zone",
      "nginx_t_status": "passed",
      "slug": "persistence-zone",
      "title": "Persistence"
    },
    {
      "config": "abuse_guard_zone zone=base:1m key=$binary_remote_addr statuses=404 interval=5s threshold=3 block=2s;\nserver { listen 8080; location / { abuse_guard zone=base status=429; } }",
      "directive": "abuse_guard",
      "nginx_t_status": "passed",
      "slug": "server-enable",
      "title": "Server enable"
    },
    {
      "config": "abuse_guard_zone zone=base:1m key=$binary_remote_addr statuses=404 interval=5s threshold=3 block=2s;\nserver { listen 8080; location / { abuse_guard zone=base dry_run=on; } }",
      "directive": "abuse_guard",
      "nginx_t_status": "passed",
      "slug": "server-dry-run",
      "title": "Dry run"
    },
    {
      "config": "abuse_guard_zone zone=base:1m key=$binary_remote_addr statuses=404 interval=5s threshold=3 block=2s;\nserver { abuse_guard_allow 127.0.0.1; location / { abuse_guard zone=base; } }",
      "directive": "abuse_guard_allow",
      "nginx_t_status": "passed",
      "slug": "allowlist",
      "title": "CIDR allowlist"
    },
    {
      "config": "abuse_guard_zone zone=base:1m key=$binary_remote_addr statuses=404 interval=5s threshold=3 block=2s;\nabuse_guard_redis host=127.0.0.1; abuse_guard_zone zone=cluster:1m redis=on;",
      "directive": "abuse_guard_redis",
      "nginx_t_status": "passed",
      "slug": "redis-replication",
      "title": "Redis replication"
    },
    {
      "config": "abuse_guard_zone zone=hmac:1m key=$binary_remote_addr statuses=404 interval=5s threshold=3 block=2s persist=/var/lib/nginx/abuse-guard.state persist_secret=00112233445566778899aabbccddeeff;",
      "directive": "abuse_guard_zone",
      "nginx_t_status": "passed",
      "slug": "hmac-persistence",
      "title": "HMAC persistence"
    }
  ],
  "directive_inventory": {
    "directives": [
      "abuse_guard",
      "abuse_guard_allow",
      "abuse_guard_redis",
      "abuse_guard_zone"
    ],
    "entries": [
      {
        "args_spec": "1+",
        "contexts": [
          "http",
          "server",
          "location"
        ],
        "name": "abuse_guard",
        "subsystem": "http"
      },
      {
        "args_spec": "1+",
        "contexts": [
          "http",
          "server",
          "location"
        ],
        "name": "abuse_guard_allow",
        "subsystem": "http"
      },
      {
        "args_spec": "1+",
        "contexts": [
          "http"
        ],
        "name": "abuse_guard_redis",
        "subsystem": "http"
      },
      {
        "args_spec": "1+",
        "contexts": [
          "http"
        ],
        "name": "abuse_guard_zone",
        "subsystem": "http"
      }
    ],
    "source": "nginx101",
    "status": "passed"
  },
  "generated_at": "2026-08-23T09:36:52Z",
  "levels": {
    "built": {
      "detail": "dynamic module built",
      "status": "passed"
    },
    "config": {
      "detail": "nginx -t inventory passed",
      "status": "passed"
    },
    "fuzzed": {
      "detail": "no same-commit fuzz CI evidence",
      "status": "not_run"
    },
    "runtime": {
      "detail": "multi-worker runtime suite passed",
      "status": "passed"
    },
    "sanitized": {
      "detail": "ASan/UBSan single-process and multi-worker jobs passed",
      "status": "passed"
    },
    "torture": {
      "detail": "nginx lifecycle adversarial suite passed",
      "status": "passed"
    }
  },
  "module": {
    "display_name": "NGINX Abuse Guard",
    "handle": "abuse-guard",
    "repo_private": true,
    "source_commit": "08537f2ca906dc1e46c7da54fd43b86389a97006",
    "upstream_freshness": "current",
    "upstream_version": "v2.0.0-4-g08537f2"
  },
  "platform": {
    "arch": "x86_64",
    "binary_sha256": "87a0075e64a9417f0d880ba3b482693bdcffac0c49511f4fe8fa18b0cf4c1e9a",
    "distro": "Ubuntu 24.04.4 LTS",
    "nginx_branch": "mainline",
    "nginx_version": "1.31.1",
    "sonames": [
      "ngx_http_abuse_guard_module.so"
    ]
  },
  "provenance": {
    "public_evidence_url": "https://nginx-extras.getpagespeed.com/verified-modules.json"
  },
  "schema_version": 1
}
