API Gateway для WordPress: полное руководство по настройке Kong и Traefik

white and blue printer paper

API Gateway и WordPress: зачем нужен шлюз?

API‑gateway – это слой, который принимает входящие HTTP‑запросы, маршрутизирует их к нужным бекенд‑сервисам и обеспечивает единый набор функций безопасности, кэширования и мониторинга. Для сайтов на WordPress это особенно ценно, когда вы используете REST‑API, WP‑CLI через HTTP, микросервисы или мобильные приложения. Шлюз позволяет централизованно управлять:

  • аутентификацией и выдачей API‑ключей;
  • ограничением количества запросов (rate limiting);
  • логированием и аналитикой трафика;
  • защитой от DDoS и ботов.

Выбор шлюза: Kong vs Traefik

На рынке доминируют два открытых решения – Kong и Traefik. Оба поддерживают плагины для rate limiting, аутентификации и мониторинга, но различаются подходом к конфигурации:

  • Kong использует собственный Admin API и декларативные файлы в формате YAML/JSON. Подходит для крупных инфраструктур, где требуется масштабирование и микросервисный подход.
  • Traefik ориентирован на динамическую конфигурацию через Docker‑labels, Kubernetes CRD или файлы TOML/YAML. Идеален для небольших проектов и легко интегрируется в CI/CD.

Оба шлюза могут работать перед вашим веб‑сервером Nginx/Apache и передавать запросы к WordPress, находящемуся за обычным виртуальным хостом.

Настройка Kong для WordPress

Установка и базовая конфигурация

Самый простой способ – использовать Docker‑образ официального Kong:

docker run -d --name kong  -e "KONG_DATABASE=off"  -e "KONG_DECLARATIVE_CONFIG=/usr/local/kong/declarative/kong.yml"  -p 8000:8000 -p 8443:8443  kong:3.4.0 

После старта админ‑панель доступна по http://localhost:8001. Для WordPress создаём сервис и роут в декларативном файле kong.yml:

_format_version: "2.1" services: - name: wordpress url: http://wordpress:80 routes: - name: wp-api paths: - /wp-json methods: [GET, POST, PUT, DELETE] plugins: - name: key-auth service: wordpress - name: rate-limiting service: wordpress config: minute: 60 policy: local 

PHP‑пример обращения к WordPress через Kong

Для обращения к API через шлюз достаточно добавить заголовок apikey. Ниже пример на PHP c cURL:

$url = 'http://localhost:8000/wp-json/wp/v2/posts'; $apiKey = 'my-secret-key'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "apikey: $apiKey", 'Accept: application/json' ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($code === 200) { $posts = json_decode($response, true); // обработка данных } else { error_log("Kong returned $code: $response"); } 

Теперь все запросы к WordPress проходят через Kong, где уже применены аутентификация и ограничения.

Настройка Traefik для WordPress

Запуск Traefik в Docker‑Compose

Traefik удобно развернуть вместе с WordPress в едином docker‑compose.yml:

version: '3.8' services: traefik: image: traefik:v2.11 command: - "--api.insecure=true" - "--providers.docker=true" - "--entrypoints.web.address=:80" ports: - "80:80" - "8080:8080" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro wordpress: image: wordpress:6.5 environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wp_user WORDPRESS_DB_PASSWORD: secret WORDPRESS_DB_NAME: wp_db labels: - "traefik.enable=true" - "traefik.http.routers.wp.rule=PathPrefix(`/` )" - "traefik.http.routers.wp.entrypoints=web" - "traefik.http.middlewares.wp-auth.basicauth.users=admin:$(htpasswd -nb admin password)" - "traefik.http.routers.wp.middlewares=wp-auth" - "traefik.http.routers.wp.service=wp-service" - "traefik.http.services.wp-service.loadbalancer.server.port=80" - "traefik.http.routers.wp-api.rule=PathPrefix(`/wp-json` )" - "traefik.http.routers.wp-api.entrypoints=web" - "traefik.http.routers.wp-api.middlewares=api-key" - "traefik.http.middlewares.api-key.headers.customrequestheaders.X-API-KEY=superkey" depends_on: - db db: image: mariadb:11.4 environment: MYSQL_DATABASE: wp_db MYSQL_USER: wp_user MYSQL_PASSWORD: secret MYSQL_ROOT_PASSWORD: rootsecret 

Rate limiting в Traefik

Traefik поддерживает плагин ratelimit. Добавьте его в секцию middlewares:

- "traefik.http.middlewares.ratelimit.ratelimit.average=100" - "traefik.http.middlewares.ratelimit.ratelimit.burst=20" - "traefik.http.routers.wp-api.middlewares=ratelimit" 

Теперь каждый IP может делать не более 100 запросов в секунду с всплеском до 20.

Безопасность: управление ключами и rate limiting

Независимо от выбранного шлюза, рекомендуется использовать два уровня защиты:

  1. API‑ключи (Key‑Auth в Kong, заголовок X-API-KEY в Traefik).
  2. Защиту от CSRF и рефереров для POST‑запросов. Подробнее о CSRF‑защите в WordPress читайте в нашем руководстве.

Для генерации ключей можно использовать произвольный скрипт на PHP:

function generate_api_key(int $len = 32): string { return bin2hex(random_bytes($len)); } $key = generate_api_key(); // Сохраните $key в отдельной таблице wp_api_keys 

При получении запроса проверяйте наличие ключа в базе и сравнивайте с тем, что пришёл в заголовке.

Мониторинг и аналитика API запросов

Оба шлюза умеют экспортировать метрики в Prometheus. Затем их можно визуализировать в Grafana. Пример конфигурации для Kong:

plugins: - name: prometheus service: wordpress config: {} 

Для более глубокой аналитики, включая поведенческий анализ и детекцию ботов, интегрируйте AI‑детекцию. Она позволяет автоматически блокировать запросы с высоким Bot‑Score.

Для визуального контроля над трафиком полезно включить Cloudflare Turnstile в качестве капчи для публичных эндпоинтов.

Заключение

API Gateway – мощный инструмент, который превращает обычный WordPress‑сайт в гибкую платформу с управляемым API‑трафиком. Выбор между Kong и Traefik зависит от вашей инфраструктуры: Kong лучше подходит для крупных микросервисных архитектур, а Traefik – для быстрых Docker‑развёртываний. Не забывайте про генерацию и проверку API‑ключей, ограничение запросов и постоянный мониторинг с помощью Prometheus или AI‑детекции. При правильной настройке шлюз станет первой линией обороны и одновременно точкой наблюдения за здоровьем вашего сайта.

❓ Часто задаваемые вопросы

Как подключить WordPress к Kong без изменения кода сайта?

Достаточно создать сервис и роут в декларативном файле Kong, указав URL вашего WordPress‑контейнера. После перезапуска Kong все запросы к /wp-json будут проходить через шлюз.

Можно ли использовать один и тот же API‑ключ для нескольких приложений?

Да, но рекомендуется генерировать отдельные ключи для каждого клиента, чтобы иметь возможность отозвать доступ без влияния на остальных.

Как включить rate limiting только для публичных эндпоинтов WordPress REST API?

Создайте отдельный плагин (Kong) или middleware (Traefik) и привяжите его к роуту, обслуживающему путь /wp-json. Другие роуты останутся без ограничений.

Какие метрики стоит отслеживать в Grafana после интеграции с API‑gateway?

Объём запросов, среднее время отклика, количество 4xx/5xx ошибок, количество сработавших лимитов и количество уникальных API‑ключей.