上一篇 下一篇 分享链接 返回 返回顶部

Cloudflare 不能私有化?这套一键部署方案给你平替架构

发布人:慈云数据-客服中心 发布时间:23小时前 阅读量:4

Cloudflare 私有化部署方案|一键部署

在企业上云、出海业务、内部系统统一接入以及多地域访问加速的场景中,Cloudflare 常常被作为一套“边缘安全与加速平台”来使用。它提供了 DNS 托管、CDN 加速、WAF 防护、DDoS 缓解、HTTPS 证书、访问控制、Zero Trust、隧道接入、边缘缓存等能力。对于大多数互联网业务而言,Cloudflare 的托管式服务非常方便,接入成本也较低。

但是,在一些特殊场景下,企业可能无法直接使用公有 Cloudflare 服务,例如:

  • 数据合规要求较高,流量不能经过第三方公网平台;
  • 内部系统需要在专有云、私有云或本地机房中统一接入;
  • 对 DNS、证书、访问控制、日志审计有完全自主可控要求;
  • 希望搭建一套类似 Cloudflare 的边缘代理、安全防护和加速平台;
  • 需要在离线环境、内网环境、政企专网中部署统一网关。

需要提前说明的是:Cloudflare 本身是商业化 SaaS 平台,并不提供完整的“私有化部署版本”供用户直接安装。 因此,本文所说的“Cloudflare 私有化部署方案”,并不是把官方 Cloudflare 原样部署到本地,而是基于开源组件组合搭建一套“类 Cloudflare 能力”的私有化边缘网关平台。

本文将围绕私有化部署架构、核心组件选型、功能映射、一键部署脚本、Docker Compose 示例、安全配置、运维建议等内容展开,帮助你快速构建一套可落地的私有化 Cloudflare 替代方案。


一、方案目标

本方案的目标是构建一套可私有化部署的统一入口平台,具备以下能力:

  1. 反向代理能力
    支持 HTTP、HTTPS、WebSocket、gRPC 等流量转发。

  2. HTTPS 自动化管理
    支持自签证书、内部 CA 证书,也可对接 ACME 自动签发证书。

  3. 域名统一接入
    支持通过不同域名、子域名、路径规则转发到不同后端服务。

  4. 基础 WAF 防护
    支持常见 Web 攻击拦截,如 SQL 注入、XSS、路径穿越、恶意 User-Agent 等。

  5. 访问控制
    支持 IP 白名单、黑名单、基础认证、OAuth2/OIDC 单点登录等。

  6. 缓存加速
    对静态资源进行缓存,提高访问速度,减少源站压力。

  7. 日志与监控
    采集访问日志、错误日志、性能指标,并接入可视化平台。

  8. 一键部署
    使用 Docker Compose 或 Shell 脚本快速部署,降低实施难度。


二、整体架构设计

一套私有化“类 Cloudflare”平台通常可以分为以下几层:

用户请求
   |
   v
DNS / 内部域名解析
   |
   v
边缘入口网关
   |
   |-- HTTPS 终止
   |-- WAF 防护
   |-- 访问控制
   |-- 缓存加速
   |-- 限流熔断
   |-- 日志采集
   |
   v
后端业务服务

在实际部署中,可以采用如下组件组合:

能力模块 推荐组件
反向代理 / 入口网关 Nginx、OpenResty、Traefik、Caddy
WAF 防护 ModSecurity、Coraza、OpenResty Lua WAF
HTTPS 证书 ACME、Let’s Encrypt、step-ca、内部 CA
DNS 服务 CoreDNS、PowerDNS、Bind9
身份认证 Authelia、OAuth2 Proxy、Keycloak
缓存加速 Nginx Cache、Varnish
日志采集 Fluent Bit、Vector、Filebeat
指标监控 Prometheus、Grafana
可视化面板 Grafana、Nginx Proxy Manager、Traefik Dashboard

为了保证部署简单,本文推荐使用以下组合:

  • OpenResty / Nginx:作为核心反向代理网关;
  • ModSecurity + OWASP CRS:提供基础 WAF 能力;
  • Authelia:提供统一身份认证与访问控制;
  • Prometheus + Grafana:提供监控和可视化;
  • Docker Compose:实现一键部署;
  • CoreDNS:可选,用于内网 DNS 管理。

三、Cloudflare 能力与私有化组件映射

下面是 Cloudflare 常见功能与私有化替代组件的对应关系:

Cloudflare 功能 私有化替代方案
DNS 托管 CoreDNS / PowerDNS / Bind9
CDN 加速 Nginx Cache / Varnish / 多节点网关
SSL/TLS Nginx + ACME / 内部 CA
WAF ModSecurity + OWASP CRS
DDoS 防护 防火墙 / 云清洗 / Anycast / 限流
Zero Trust Authelia / Keycloak / OAuth2 Proxy
Access Authelia + Nginx auth_request
Tunnel frp / rathole / WireGuard / Cloudflare Tunnel 替代
Bot 防护 WAF 规则 / JS Challenge / 速率限制
Analytics Prometheus + Grafana + 日志平台
Page Rules Nginx location / Traefik Middleware
Workers OpenResty Lua / Nginx njs / Envoy WASM

需要注意,私有化方案可以覆盖大量常规能力,但如果要达到 Cloudflare 全球 Anycast 网络、超大规模 DDoS 清洗、边缘计算生态和全球 CDN 节点覆盖能力,则需要极高的网络、带宽和运维投入。对于企业内部系统、专有云统一入口、中小规模业务加速和安全防护来说,本文方案已经具备较强实用价值。


四、部署环境要求

建议准备一台或多台 Linux 服务器,基础要求如下:

1. 单节点测试环境

配置项 建议
CPU 2 核及以上
内存 4GB 及以上
磁盘 40GB 及以上
系统 Ubuntu 22.04 / Debian 12 / Rocky Linux 9
网络 开放 80、443、9090、3000 等端口

2. 生产环境建议

配置项 建议
CPU 4 核及以上
内存 8GB 及以上
磁盘 SSD 100GB 及以上
网络 独立公网 IP 或内网 VIP
高可用 至少 2 台网关节点
负载均衡 LVS / HAProxy / 云 LB
日志存储 单独日志服务器或对象存储
监控告警 Prometheus + Alertmanager

五、目录结构设计

为了方便维护,建议项目目录如下:

cloudflare-private/
├── docker-compose.yml
├── .env
├── nginx/
│   ├── nginx.conf
│   ├── conf.d/
│   │   ├── app.example.com.conf
│   │   └── auth.conf
│   ├── certs/
│   ├── cache/
│   └── logs/
├── modsecurity/
│   ├── modsecurity.conf
│   └── crs/
├── authelia/
│   ├── configuration.yml
│   └── users_database.yml
├── prometheus/
│   └── prometheus.yml
├── grafana/
│   └── data/
└── scripts/
    ├── install.sh
    ├── start.sh
    ├── stop.sh
    └── reload.sh

这样的目录结构清晰地将网关配置、WAF 配置、身份认证配置、监控配置和运维脚本分开,后续升级和排障都更加方便。


六、Docker Compose 一键部署方案

下面给出一个简化版的 docker-compose.yml,用于部署网关、认证、监控等核心服务。

version: "3.9"

services:
  gateway:
    image: nginx:1.25
    container_name: private-cloudflare-gateway
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./nginx/conf.d:/etc/nginx/conf.d:ro
      - ./nginx/certs:/etc/nginx/certs:ro
      - ./nginx/cache:/var/cache/nginx
      - ./nginx/logs:/var/log/nginx
    networks:
      - edge

  authelia:
    image: authelia/authelia:latest
    container_name: private-cloudflare-authelia
    restart: always
    volumes:
      - ./authelia:/config
    networks:
      - edge
    expose:
      - "9091"

  prometheus:
    image: prom/prometheus:latest
    container_name: private-cloudflare-prometheus
    restart: always
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
    ports:
      - "9090:9090"
    networks:
      - edge

  grafana:
    image: grafana/grafana:latest
    container_name: private-cloudflare-grafana
    restart: always
    ports:
      - "3000:3000"
    volumes:
      - ./grafana/data:/var/lib/grafana
    networks:
      - edge

networks:
  edge:
    driver: bridge

该 Compose 文件实现了四个核心服务:

  • gateway:统一流量入口;
  • authelia:统一登录认证;
  • prometheus:指标采集;
  • grafana:可视化监控面板。

如果需要 WAF,可使用支持 ModSecurity 的 Nginx 镜像,或者将 WAF 独立部署为前置网关。


七、Nginx 网关核心配置

下面是一个基础 nginx.conf 示例:

user nginx;
worker_processes auto;

events {
    worker_connections 4096;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for" '
                    'rt=$request_time uct="$upstream_connect_time" '
                    'uht="$upstream_header_time" urt="$upstream_response_time"';

    access_log /var/log/nginx/access.log main;
    error_log  /var/log/nginx/error.log warn;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    keepalive_timeout 65;
    server_tokens off;

    client_max_body_size 100m;

    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=edge_cache:100m
                     max_size=10g inactive=60m use_temp_path=off;

    include /etc/nginx/conf.d/*.conf;
}

示例站点配置 app.example.com.conf

server {
    listen 80;
    server_name app.example.com;

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name app.example.com;

    ssl_certificate     /etc/nginx/certs/app.example.com.crt;
    ssl_certificate_key /etc/nginx/certs/app.example.com.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    add_header X-Frame-Options SAMEORIGIN always;
    add_header X-Content-Type-Options nosniff always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header Referrer-Policy no-referrer-when-downgrade always;

    location / {
        proxy_pass http://backend-app:8080;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_cache edge_cache;
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;

        proxy_connect_timeout 10s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }
}

通过该配置,平台即可实现 HTTPS 终止、反向代理、静态缓存、安全响应头等基础能力。


八、访问认证与 Zero Trust 能力

Cloudflare Access 的核心价值是:用户访问内部应用时,不再直接暴露应用登录页,而是先经过统一身份认证、策略校验,再转发到后端服务。

私有化环境中可以使用 Authelia 实现类似能力。Nginx 可通过 auth_request 与 Authelia 集成。

示例配置:

location /authelia {
    internal;
    proxy_pass http://authelia:9091/api/verify;
    proxy_set_header X-Original-URL $scheme://$http_host$request_uri;
    proxy_set_header X-Forwarded-Method $request_method;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host $http_host;
    proxy_set_header X-Forwarded-Uri $request_uri;
}

location / {
    auth_request /authelia;
    error_page 401 =302 https://auth.example.com;

    proxy_pass http://backend-app:8080;
}

Authelia 支持:

  • 用户名密码登录;
  • 双因素认证;
  • LDAP 对接;
  • OIDC 集成;
  • 基于域名、路径、用户组的访问策略;
  • Session 管理;
  • 登录审计。

对于企业内网系统来说,这可以有效减少系统暴露面,将所有应用统一纳入访问控制体系。


九、WAF 防护设计

Cloudflare 的 WAF 是其重要能力之一。在私有化方案中,可以使用 ModSecurity + OWASP Core Rule Set 实现基础防护。

常见防护场景包括:

  • SQL 注入;
  • XSS 跨站脚本;
  • 命令注入;
  • 文件包含;
  • 路径穿越;
  • 恶意爬虫;
  • 异常请求头;
  • 大量异常参数。

生产环境建议 WAF 分阶段启用:

第一阶段:检测模式

先将 WAF 配置为只记录不拦截,观察是否有误报。

SecRuleEngine DetectionOnly

第二阶段:低风险拦截

对明显恶意请求启用拦截,例如常见扫描器、恶意路径、危险参数。

SecRuleEngine On

第三阶段:按业务调优

根据日志中的误报情况,为特定接口添加白名单或降低规则等级。

WAF 的核心不是“一开即安全”,而是持续调优。对于复杂业务系统,如果不做规则优化,可能会出现误拦截。因此上线前必须经过压测和灰度验证。


十、一键部署脚本

为了降低部署门槛,可以编写 install.sh 脚本完成 Docker、Docker Compose、目录初始化和服务启动。

#!/usr/bin/env bash

set -e

PROJECT_DIR="/opt/cloudflare-private"

echo "==> 创建部署目录"
mkdir -p ${PROJECT_DIR}
cd ${PROJECT_DIR}

echo "==> 创建基础目录"
mkdir -p nginx/conf.d nginx/certs nginx/cache nginx/logs
mkdir -p authelia prometheus grafana/data scripts

echo "==> 检查 Docker"
if ! command -v docker >/dev/null 2>&1; then
  echo "Docker 未安装,开始安装 Docker..."
  curl -fsSL https://get.docker.com | bash
  systemctl enable docker
  systemctl start docker
else
  echo "Docker 已安装"
fi

echo "==> 检查 Docker Compose"
if ! docker compose version >/dev/null 2>&1; then
  echo "Docker Compose 不可用,请确认 Docker 版本是否支持 compose 插件"
  exit 1
fi

echo "==> 写入 docker-compose.yml"
cat > docker-compose.yml <<'EOF'
version: "3.9"

services:
  gateway:
    image: nginx:1.25
    container_name: private-cloudflare-gateway
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./nginx/conf.d:/etc/nginx/conf.d:ro
      - ./nginx/certs:/etc/nginx/certs:ro
      - ./nginx/cache:/var/cache/nginx
      - ./nginx/logs:/var/log/nginx
    networks:
      - edge

  prometheus:
    image: prom/prometheus:latest
    container_name: private-cloudflare-prometheus
    restart: always
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
    networks:
      - edge

  grafana:
    image: grafana/grafana:latest
    container_name: private-cloudflare-grafana
    restart: always
    ports:
      - "3000:3000"
    volumes:
      - ./grafana/data:/var/lib/grafana
    networks:
      - edge

networks:
  edge:
    driver: bridge
EOF

echo "==> 写入 nginx.conf"
cat > nginx/nginx.conf <<'EOF'
user nginx;
worker_processes auto;

events {
    worker_connections 4096;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/nginx/access.log main;
    error_log  /var/log/nginx/error.log warn;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    keepalive_timeout 65;
    server_tokens off;

    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=edge_cache:100m
                     max_size=10g inactive=60m use_temp_path=off;

    include /etc/nginx/conf.d/*.conf;
}
EOF

echo "==> 写入默认站点配置"
cat > nginx/conf.d/default.conf <<'EOF'
server {
    listen 80 default_server;
    server_name _;

    location / {
        return 200 "Private Cloudflare Gateway is running.\n";
    }
}
EOF

echo "==> 写入 Prometheus 配置"
cat > prometheus/prometheus.yml <<'EOF'
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]
EOF

echo "==> 启动服务"
docker compose up -d

echo "==> 部署完成"
echo "访问测试:http://服务器IP"
echo "Grafana:http://服务器IP:3000 默认账号:admin/admin"
echo "Prometheus:http://服务器IP:9090"

使用方式:

chmod +x install.sh
sudo ./install.sh

部署完成后,访问服务器 IP,如果看到:

Private Cloudflare Gateway is running.

说明网关服务已经启动成功。


十一、域名接入流程

部署完成后,可以按照以下流程接入业务:

1. 配置 DNS

如果是公网业务,将域名解析到网关服务器公网 IP。

app.example.com  A  1.2.3.4

如果是内网业务,可以在内部 DNS 中添加解析:

app.internal.example.com  A  10.0.0.10

2. 准备证书

可以使用以下几种方式:

  • 公网域名使用 Let’s Encrypt;
  • 内网域名使用企业内部 CA;
  • 测试环境使用自签证书;
  • 多域名使用通配符证书。

3. 新增 Nginx 站点配置

例如:

server {
    listen 80;
    server_name app.example.com;

    location / {
        proxy_pass http://10.0.0.20:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

4. 重载网关

docker exec private-cloudflare-gateway nginx -t
docker exec private-cloudflare-gateway nginx -s reload

十二、生产环境高可用设计

单节点部署适合测试和小规模业务,生产环境建议至少采用双节点架构:

用户
 |
DNS / 负载均衡
 |
+---------------------+
|                     |
v                     v
网关节点 1          网关节点 2
 |                     |
 +----------+----------+
            |
            v
        后端服务集群

高可用方案可以采用:

  1. DNS 多 A 记录
    简单易用,但故障切换依赖 DNS 缓存,实时性一般。

  2. LVS / Keepalived
    适合内网或自建机房,使用 VIP 漂移实现高可用。

  3. 云负载均衡 SLB
    如果部署在云环境中,可以使用云厂商负载均衡。

  4. HAProxy 前置负载均衡
    可以提供更灵活的健康检查与流量调度。

同时,多个网关节点之间需要保证配置一致。可以使用 Git 管理配置文件,再通过 CI/CD 或 Ansible 批量同步。


十三、安全加固建议

私有化网关是企业业务入口,安全加固非常重要。

1. 最小化端口开放

公网只建议开放:

  • 80;
  • 443;
  • 必要的 VPN 或堡垒机端口。

Prometheus、Grafana、管理后台等不建议直接暴露公网。

2. 禁用版本暴露

Nginx 中设置:

server_tokens off;

3. 启用 HTTPS

生产环境必须启用 HTTPS,并建议关闭 TLS 1.0 和 TLS 1.1。

4. 配置限流

limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;

server {
    location / {
        limit_req zone=req_limit burst=20 nodelay;
        proxy_pass http://backend;
    }
}

5. 配置 IP 黑白名单

allow 10.0.0.0/8;
allow 192.168.0.0/16;
deny all;

6. 日志审计

建议保留至少 30 天访问日志,并对异常状态码、异常路径、异常 IP 进行统计分析。


十四、运维与监控

一个可长期运行的私有化平台,不能只关注部署,还需要关注运维。

建议监控以下指标:

  • 网关 QPS;
  • 4xx / 5xx 状态码比例;
  • 上游服务响应时间;
  • Nginx 连接数;
  • 缓存命中率;
  • CPU、内存、磁盘、网络流量;
  • WAF 拦截次数;
  • 登录失败次数;
  • TLS 证书到期时间。

日志方面建议采集:

  • Nginx access.log;
  • Nginx error.log;
  • WAF audit log;
  • Authelia 登录日志;
  • Docker 容器日志;
  • 系统安全日志。

对于生产系统,应配置告警规则,例如:

  • 5xx 比例连续 5 分钟超过 5%;
  • 某 IP 1 分钟内请求超过阈值;
  • 证书将在 15 天内过期;
  • 网关磁盘使用率超过 80%;
  • 后端服务健康检查失败。

十五、适用场景与限制

适用场景

该方案适合:

  • 企业内部系统统一入口;
  • 私有云 / 专有云业务网关;
  • 开发、测试、预生产环境统一代理;
  • 中小规模网站安全加速;
  • 需要自主可控的反向代理与访问控制平台;
  • 不方便使用公有 Cloudflare 的合规场景。

不适用场景

该方案不适合:

  • 需要全球级 Anycast CDN 的超大规模业务;
  • 需要 Tbps 级 DDoS 清洗能力的高风险业务;
  • 希望完全复制 Cloudflare Workers 生态的边缘计算场景;
  • 没有任何运维能力却要求高安全等级的场景。

私有化部署的优势是自主可控,缺点是需要自行负责安全、监控、升级、容量规划和故障处理。


十六、总结

Cloudflare 是优秀的边缘网络与安全平台,但它本质上是 SaaS 服务,并不能被完整私有化安装。对于有合规、安全、内网接入或自主可控需求的企业,可以通过开源组件组合实现一套“类 Cloudflare”的私有化部署方案。

本文方案以 Nginx / OpenResty 为核心入口,结合 WAF、Authelia、Prometheus、Grafana、内部 DNS、证书管理等组件,实现了反向代理、HTTPS、访问控制、缓存加速、安全防护和监控可视化等能力。通过 Docker Compose 和一键部署脚本,可以在较短时间内搭建出一个可用的私有化边缘网关平台。

如果用于生产环境,建议进一步补充高可用架构、集中日志、配置管理、自动化证书、WAF 调优、限流策略和灾备方案。只要规划合理,这套方案不仅可以作为 Cloudflare 的私有化替代架构,也可以成为企业统一应用入口、内外网安全接入和零信任访问控制的基础平台。

目录结构
全文