Skip to content
Эта страница создана и переведена с помощью ИИ. Если вы заметили неточности, помогите нам улучшить её. Редактировать на GitHub

Шлюз

PRX-WAF построен на Pingora — библиотеке Rust HTTP-прокси от Cloudflare. Шлюз обрабатывает весь входящий трафик, маршрутизирует запросы к апстрим-бэкендам и применяет конвейер обнаружения WAF перед проксированием.

Поддержка протоколов

ПротоколСтатусПримечания
HTTP/1.1ПоддерживаетсяПо умолчанию
HTTP/2ПоддерживаетсяАвтоматическое обновление через ALPN
HTTP/3 (QUIC)ОпциональноЧерез библиотеку Quinn, требует конфигурации [http3]
WebSocketПоддерживаетсяПолнодуплексное проксирование

Ключевые возможности

Балансировка нагрузки

PRX-WAF распределяет трафик по апстрим-бэкендам с использованием взвешенной балансировки нагрузки round-robin. Каждая запись хоста может указывать несколько апстрим-серверов с относительными весами:

toml
[[hosts]]
host        = "example.com"
port        = 80
remote_host = "10.0.0.1"
remote_port = 8080
guard_status = true

Хостами также можно управлять через Admin UI или REST API по адресу /api/hosts.

Кеширование ответов

Шлюз включает LRU in-memory кеш на базе moka для снижения нагрузки на апстрим-серверы:

toml
[cache]
enabled          = true
max_size_mb      = 256       # Максимальный размер кеша
default_ttl_secs = 60        # TTL по умолчанию для кешированных ответов
max_ttl_secs     = 3600      # Максимальный TTL

Кеш соблюдает стандартные HTTP-заголовки кеширования (Cache-Control, Expires, ETag, Last-Modified) и поддерживает инвалидацию кеша через Admin API.

Обратные туннели

PRX-WAF может создавать обратные туннели на базе WebSocket (аналогично Cloudflare Tunnels) для предоставления доступа к внутренним сервисам без открытия входящих портов брандмауэра:

bash
# Список активных туннелей
curl -H "Authorization: Bearer $TOKEN" http://localhost:9527/api/tunnels

# Создать туннель
curl -X POST -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"internal-api","target":"http://192.168.1.10:3000"}' \
  http://localhost:9527/api/tunnels

Защита от хотлинкинга

Шлюз поддерживает защиту от хотлинкинга на основе Referer для каждого хоста. При включении запросы без допустимого заголовка Referer с настроенного домена блокируются. Это настраивается для каждого хоста в Admin UI или через API.

Архитектура

mermaid
graph LR
    CLIENT["Client"] --> LISTEN["Pingora Listener<br/>TCP / TLS / QUIC"]
    LISTEN --> WAF["WAF Engine<br/>16 Phases"]
    WAF -->|pass| CACHE{"Cache<br/>Hit?"}
    CACHE -->|hit| RESP["Response"]
    CACHE -->|miss| LB["Load Balancer<br/>Weighted Round-Robin"]
    LB --> UP1["Upstream 1"]
    LB --> UP2["Upstream 2"]
    LB --> UP3["Upstream N"]
    UP1 --> RESP
    UP2 --> RESP
    UP3 --> RESP

Следующие шаги

Released under the Apache-2.0 License.