Files
OpenFlare/README.zh-CN.md
T

11 KiB
Raw Blame History

OpenFlare

新一代分布式反向代理与边缘安全网关
Next-Gen Distributed Reverse Proxy & Edge Gateway for OpenResty / Nginx

简体中文 | English

license release ghcr


📖 什么是 OpenFlare?

OpenFlare 是一套面向多服务器与分布式集群的新一代开源反向代理与边缘安全网关平台。

它并非简单的单机管理面板,而是将传统的 OpenResty / Nginx 升级为具备多节点集群化编排、动态热更新、边缘 WAF 防护以及内网穿透能力的现代化边缘网络基础设施:

  • ⚡ 告别手写配置与 Reload 抖动:单一控制面板管理任意数量的边缘节点,配置差分毫秒级热同步(Zero-Reload),业务流量平滑无感。
  • 🛡️ 开箱即用的边缘安全防御:内置 WAF 规则引擎、国家级 GeoIP 访问控制,以及类似 Cloudflare Turnstile 的客户端密码学 PoW 防 CC 人机验证(5 秒盾),在边缘秒级阻断僵尸网络。
  • 🚇 原生安全内网穿透(Tunnels):无需公网 IP 和复杂路由器端口映射,通过轻量级 openflared 客户端打通加密隧道,安全将内网 Web 服务接入边缘网关并享受全套安全防护。
  • 📦 静态 Pages 边缘托管:支持从 GitHub Release 产物或直传静态包全自动部署至各边缘节点本地分发,支持多版本回滚与 SPA 路由。
  • 🔒 自动化证书与统一认证:ACME 协议全自动申请与续期 Let's Encrypt 多域名证书,支持 GitHub OAuth 和标准 OIDC 企业单点登录。

🌐 灵活的部署模式:独立自建 vs 协同 Cloudflare

OpenFlare 既可以作为独立的边缘网关使用,也可以与 Cloudflare 等公网 CDN 完美协作互补:

1. 独立自建模式 (Standalone Edge Gateway)

适用于多台 VPS、跨地域云服务器或 Homelab:

  • 自主搭建私有 CDN 与反向代理集群,数据和流量 100% 本地掌控。
  • 拥有完整的边缘防 CC 人机验证、自建 SSL 证书管理与内网穿透能力,无需采购昂贵的商业安全套餐。

2. Cloudflare 源站防护盾模式 (Behind Cloudflare / Origin Shield)

作为 Cloudflare 背后坚固的源站集群网关:

  • 防范源站真实 IP 泄露:即使攻击者通过历史解析或漏洞绕过 Cloudflare 直连你的源站真实 IP,OpenFlare 边缘的 WAF 与 PoW 人机挑战仍会在第一时间将其阻断。
  • 全量私有访问日志沉淀:弥补商业 CDN 免费版日志保留极短、明细不足的痛点,全量审计请求日志与监控指标。
  • 统一内网与跨服路由:由 OpenFlare 统一承接来自 Cloudflare 的流量,智能分发至源站多服务或内网穿透应用。

📊 横向对比:传统 Nginx vs Nginx Proxy Manager vs OpenFlare

维度 传统 Nginx (nginx.conf) Nginx Proxy Manager (NPM) OpenFlare
集群架构 每台机器独立维护,频繁 SSH 仅支持单机,无法多节点集群协同 原生分布式控制面 + 边缘 Agent 集群
配置生效方式 每次需 nginx -s reload,连接可能抖动 频繁 Reload 共享内存/差分热同步,Zero-Reload
防 CC / 爬虫人机验证 仅支持简单的 limit_req 频率限制 不支持 内置类似 Turnstile 的 PoW 客户端挑战
内网穿透 (Tunnels) 需繁琐集成第三方程式 (如 frp) 不支持 内置 OpenFlared 穿透隧道,开箱即用
WAF 与安全防护 需复杂编译配置 ModSecurity 仅基础 Exploits 规则 动态 WAF、国家级 GeoIP、IP 组差分准入
静态 Pages 托管 手动上传并配置静态目录 仅静态文件代理 自动化拉取 GitHub Release,版本回滚
配合 Cloudflare 手动配置 set_real_ip_from 极其繁琐 需繁琐设置代理头部 原生还原真实 IP,完美充当源站护盾

🏗️ 架构拓扑

flowchart TD
    subgraph Visitors ["公网访客与客户端"]
        User["公网访客 / 移动端"]
        CF["Cloudflare CDN (可选代理层)"]
    end

    subgraph EdgePlane ["边缘数据面 (OpenResty Agent 节点)"]
        Edge1["边缘节点 A (OpenResty)"]
        Edge2["边缘节点 B (OpenResty)"]
    end

    subgraph ControlPlane ["控制面 (Control Plane)"]
        Server["OpenFlare Server (Web 控制台)"]
        DB[("PostgreSQL + Redis")]
    end

    subgraph Backend ["源站与内网服务"]
        Origin["公网源站 Web 服务"]
        subgraph PrivateNet ["私有网络 / Homelab"]
            NAS["私有应用 / NAS"]
            Client["OpenFlared 穿透客户端"]
        end
    end

    User -->|直连 HTTPS 访问| Edge1
    User -->|经 Cloudflare 代理| CF
    CF -->|安全回源| Edge2

    Server <-->|差分热同步 / 指标上报| Edge1
    Server <-->|差分热同步 / 指标上报| Edge2
    Server --- DB

    Edge1 -->|反向代理| Origin
    Edge2 -->|反向代理| Origin

    Client <-->|加密穿透隧道| Edge1
    NAS --- Client

🖥️ 界面预览

仪表盘与实时观测

OpenFlare 仪表盘总览

边缘 WAF 与访问控制

OpenFlare WAF 防护

域名与流量分析

OpenFlare 域名访问概览


⚡ 快速开始

1. 启动 Server 控制端

使用 docker-compose 快速启动控制面:

# 获取环境变量模板
curl -o .env.example https://raw.githubusercontent.com/Rain-kl/OpenFlare/refs/heads/main/.env.example
cp .env.example .env
services:
  openflare:
    image: ghcr.io/rain-kl/openflare:latest
    restart: unless-stopped
    env_file: .env
    environment:
      TZ: ${TZ:-Asia/Shanghai}
    ports:
      - "3000:3000"
    volumes:
      - openflare_uploads:/app/uploads
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy

  postgres:
    image: postgres:17-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: ${DB_NAME:-openflare}
      POSTGRES_USER: ${DB_USERNAME:-openflare}
      POSTGRES_PASSWORD: ${DB_PASSWORD:-replace-with-strong-password}
    volumes:
      - openflare_postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${DB_USERNAME:-openflare} -d ${DB_NAME:-openflare}"]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: valkey/valkey:8.0-alpine
    restart: unless-stopped
    command: ["valkey-server", "--appendonly", "yes"]
    volumes:
      - openflare_redis_data:/data
    healthcheck:
      test: ["CMD", "valkey-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 5s

volumes:
  openflare_uploads:
  openflare_postgres_data:
  openflare_redis_data:
  • 访问控制台:http://localhost:3000
  • 默认账号密码:admin / 12345678

Warning

初次登录后,请务必在后台第一时间修改默认密码 12345678。
BETA 版本处于开发与测试阶段,生产环境请提前做好数据备份。

2. 部署边缘 Agent 节点

在任意作为边缘代理的服务器上执行(需开放 80/443 端口):

docker pull ghcr.io/rain-kl/openflare-agent:latest
docker run -d --name openflare-agent --restart unless-stopped \
  -p 80:80 -p 443:443/tcp -p 443:443/udp \
  -v openflare-agent-pages:/data/var/lib/openflare/pages \
  -e OPENFLARE_SERVER_URL=http://<YOUR_SERVER_IP>:3000 \
  -e OPENFLARE_AGENT_TOKEN=<YOUR_AGENT_TOKEN> \
  ghcr.io/rain-kl/openflare-agent:latest

(Token 可在管理后台的「节点管理 -> 详情 -> 节点信息」中直接一键生成与复制)


📚 官方文档

完整配置与进阶部署详见官方文档:https://openflare.fyrn.link

🔍 查看各组件最低与推荐硬件配置要求
组件 最低硬件配置 推荐硬件配置 说明
Server 控制面 1 核 CPU / 2 GB 内存 / 20 GB 磁盘 2 核 CPU / 4 GB 内存 / 50 GB+ 磁盘 根据访问日志存储时长和吞吐量灵活规划
Agent 数据面 1 核 CPU / 512 MB 内存 / 2 GB 磁盘 2 核 CPU / 2 GB 内存 / 10 GB+ 磁盘 取决于并发代理量与 WAF 规则量
Relay 中继节点 1 核 CPU / 1 GB 内存 / 5 GB 磁盘 2 核 CPU / 2 GB 内存 / 20 GB 磁盘 主要受网络带宽与并发吞吐限制
OpenFlared 客户端 1 核 CPU / 256 MB 内存 / 1 GB 磁盘 1 核 CPU / 512 MB 内存 / 5 GB 磁盘 极低内存占用,保证网络连接畅通即可

⚖️ 商标免责声明 (Trademark Disclaimer)

OpenFlare is an independent, community-driven open-source project. It is not affiliated with, endorsed by, or sponsored by Cloudflare, Inc. Cloudflare and related trademarks are the property of their respective owners.

OpenFlare 是一个由社区驱动的独立开源项目,与 Cloudflare, Inc. 无任何附属、认可或赞助关系。Cloudflare 及其相关商标均为其各自持有者的财产。


📄 开源协议

本项目基于 Apache License 2.0 协议开源。

⭐ Star History

Star History Chart