惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fox-IT International blog
Recent Announcements
Recent Announcements
D
Docker
IT之家
IT之家
B
Blog
Jina AI
Jina AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 【当耐特】
Google DeepMind News
Google DeepMind News
F
Fortinet All Blogs
量子位
C
Check Point Blog
Microsoft Azure Blog
Microsoft Azure Blog
罗磊的独立博客
博客园 - 司徒正美
李成银的技术随笔
美团技术团队
Blog — PlanetScale
Blog — PlanetScale
雷峰网
雷峰网
The GitHub Blog
The GitHub Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
J
Java Code Geeks
T
The Blog of Author Tim Ferriss
酷 壳 – CoolShell
酷 壳 – CoolShell
MongoDB | Blog
MongoDB | Blog
P
Proofpoint News Feed
L
LangChain Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Y
Y Combinator Blog
大猫的无限游戏
大猫的无限游戏
有赞技术团队
有赞技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
Visual Studio Blog
T
Tailwind CSS Blog
H
Help Net Security
Engineering at Meta
Engineering at Meta
小众软件
小众软件
B
Blog RSS Feed
Stack Overflow Blog
Stack Overflow Blog
月光博客
月光博客
M
Microsoft Research Blog - Microsoft Research
宝玉的分享
宝玉的分享
人人都是产品经理
人人都是产品经理
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
GbyAI
GbyAI
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Last Week in AI
Last Week in AI
Martin Fowler
Martin Fowler
Stack Overflow Blog
Stack Overflow Blog

帽之岛 | Hat's Land

把钱花在刀刃上:我的 Claude Code 省钱指南 科技快讯: Cloudflare 出现全球性大规模中断 Google Cloud Platform 核心服务出现全球性大规模中断 Kuma Mieru - 一款基于 Next.js 15 的 Uptime Kuma 仪表盘插件 VPS.Town 香港存储型 VPS 促销:AFF Channel 专属优惠,买断硬盘,1 元升级配置! Skywolf 香港 Lumen VPS 综合测评,折后 $3美元/月起售,移动神机 Google Chrome 从 A~Z & 2024 年度总结 关于我 Aqua Speed,一款更强大、更美观的跨平台 CLI 测速工具 2024 年国产大语言 AI 模型主观横评 中国大陆解禁 Onlyfans,这事保真吗? 美团信用卡数据泄露传闻:分析与观点 自用 API 之随机猫猫头像 Android 重大密钥泄露事件,将重创 Google 设备认证体系 关于运营社群频道:一些个人的感想和反思 特殊排版测试 DMIT 美国洛杉矶 LAX 硬件升级,全线补货,折后$39美元/年起! Cloudflare 近日发布第 12 代服务器,AMD, Yes! 聊聊 Linux 系统时间同步机制:从 NTP 到 Chrony 浅谈 SS7 攻击:窥探隐私的利器 友情链接 在 Vite 开发环境中优雅地开始 HTTPS 调试 NNC 香港VPS - Premium 综合测评,折后$6/月起 如何优雅地从 Authy Desktop 中导出 TOTP 密钥 如何注册一个特别的 Outlook 邮箱? NNC 日本BGP VPS 综合测评 自用脚本 | 自签 SSL 证书
Cloudflare 自定义页面模板 - Next.js
2025-02-17 · via 帽之岛 | Hat's Land

发布时间:2025-02-17 10:53

最后编辑:2025-02-17 11:00

全文大约 2990 字(读完需 10 分钟)

🌐 Cloudflare Custom Pages - Next.js

使用 Next.jsTailwind CSSHeroUI 实现一套美观的、开箱即用的 Cloudflare WAF 自定义页面模板。本模板基于 Next.js 15、使用 TypeScript 和 Tailwind CSS 开发,适配多种设备布局、支持深色模式、自动替换 Cloudflare 变量。

简体中文 | Online Demo

✨ 主要特点

  • 🎨 现代化响应式设计:适配各种设备尺寸,使用 Polyfill 技术向前兼容老旧浏览器。
  • 🌙 深色模式支持:自动适配系统偏好,支持切换亮/暗色模式。
  • 🔒 完整支持所有 Cloudflare 自定义页面类型
    • Block: WAF 拦截页面
    • Error: 1000s / 500s 错误页面
    • Captcha: CAPTCHA 质询页面
  • 🎭 自动替换 Cloudflare 变量:无缝集成 Cloudflare 特定变量到页面中。

📸 截图预览

Preview
主页

亮色暗色
Block from WAF Block from IP
UAM (Under Attack Mode) JavaScript Challenge

🛠️ 技术栈

  • Next.js 15 + React 19
  • HeroUI v2 + Tailwind CSS v3
  • TypeScript

🎯 支持变量

目前本模板支持自动替换以下变量:

  • ::CLIENT_IP:: - 客户端 IP 地址
  • ::RAY_ID:: - Cloudflare Ray ID
  • ::GEO:: - 客户端地理位置
  • ::CLOUDFLARE_ERROR_500S_BOX:: - 500s 错误页面组件
  • ::CLOUDFLARE_ERROR_1000S_BOX:: - 1000s 错误页面组件
  • ::CAPTCHA_BOX:: - Cloudflare 的 CAPTCHA 组件
  • ::IM_UNDER_ATTACK_BOX:: - Cloudflare 的 JavaScript 挑战组件

🔭 使用指南

可快速点击 这个链接 快速跳转到 Cloudflare 的 Custom Pages 页面。

小贴士

您的域必须购买 Pro 及以上的付费套餐才能使用本模板。

类型子类型链接
错误页面服务器错误 500s传送门
CF 1000s 错误页面传送门
阻止页面IP 拦截页面 (1006)传送门
WAF 拦截页面 (1010)传送门
速率限制拦截 (429)传送门
验证页面交互式质询传送门
托管质询 (I'm Under Attack Mode™)传送门
国家 (地区) 质询传送门
JavaScript 质询传送门

🌍 部署指南

  • 部署到 Vercel (推荐)

    Deploy with Vercel

  • 自行部署

    bash

    bun run build
    # 如果您使用 Nginx 等程序,请忽略以下命令
    bun run start

    bun run start 会使用 serve@latest 启动一个本地服务器,并默认监听 0.0.0.0:3001

🚀 开发指南

  1. 安装 Bun

    bash

    # macOS/Linux:
    curl -fsSL https://bun.sh/install | bash
    # Windows PowerShell:
    powershell -c "irm bun.sh/install.ps1 | iex"
  2. 下载项目

    bash

    git clone https://github.com/Alice39s/cloudflare-custom-pages-nextjs.git
  3. 安装依赖

    bash

    bun install
  4. 启动开发服务器

    bash

    bun dev
  5. 构建生产版本

    bash

    bun run build

🎨 自定义指南

1. 自定义站点配置

可修改 ./config/site.ts 中的 namedescription 等字段。

2. 自定义文案

修改 ./config/routes.ts,示例如下:

ts

// ./config/routes.ts
export type BlockPageConfig = BasePageConfig & {
  type: "ip" | "waf" | "rate-limit";
  code: string;
};

export const blockPages: Record<string, BlockPageConfig> = {
    ip: {
        type: "ip",
        title: "Access Denied (1006)",
        message: "The owner of this website has banned your IP address.",
        code: "1006",
        icon: "shield-ban", // 图标名称, 可参考 `./config/icons.ts` 中的 `IconKey` 类型
    },
    ...
}
  • type 用于区分页面路由,若没有前端开发基础,不建议修改。
  • title 表示错误页面的标题,可随意更改。
  • message 表示页面提示信息,可随意更改,只允许字符串类型。
  • code 表示页面错误代码,主要用于首页展示。
  • icon 表示页面所用图标,可随意更改,自定义图标可参考 4. 自定义图标 一节。

3. 自定义组件样式

项目结构如下:

components/
├── cf/        # 🌩️ Cloudflare 页面组件
├── home/      # 🏠 首页组件
└── layout/    # 🖼️ 全局布局组件

4. 自定义图标

本项目使用 lucide-react 图标库,为了节省项目体积,封装了一个统一入口、按需引入的组件 Icon

你可以根据以下步骤添加/替换图标:

  1. ./config/icons.ts 中确定你想要使用的图标不在清单中,如果已存在,则直接跳到第 5 步。
  2. 前往 Lucide 图标库,挑选你喜欢的图标。
  3. 点击 Copy Component Name 按钮复制图标名称。
  4. 随后前往 ./config/icons.ts 按照指引依次将图标名称添加到:
    1. import { ... Component } from "lucide-react" (引入图标组件)
    2. export type IconKey = ... (添加图标名称到类型列表)
    3. export const icons = { ... } (添加图标名称到映射字典)
  5. 最后在 ./config/routes.ts 中使用你想要的图标。

📜 许可证

本项目采用 GPL v3.0 许可证开源,详情请参阅 LICENSE 文件。