cloudflare-error-page README

The project's README from github.com/donlon/cloudflare-error-page. As one markdown file: README.md.

Cloudflare Error Page Generator

What does this project do?

This project creates customized error pages that mimic the well-known Cloudflare error page. You can also embed it into your own website.

Online Editor

Here's an online editor to create customized error pages and example server apps. Try it out here.

Editor

Quickstart for Programmers

JavaScript/NodeJS

Install the cloudflare-error-page package using npm:

npm install cloudflare-error-page

The following example demonstrates an Express application that automatically handles server errors.

import express from 'express';
import { render as render_cf_error_page } from 'cloudflare-error-page';

const app = express();

app.get('/', (req, res) => {
  /* Some code that break prod. Pushed by a new employee recently. */
  let [feature_values, _] = features
    .append_with_names(self.config.feature_names)
    .unwrap();
}

app.use((err, req, res) => {
  /* Handle the error intelligently by using a custom handler */
  res.status(500).send(render_cf_error_page({
    "title": "Internal server error",
    "error_code": "500",
    "what_happened": err.toString(),
    "what_can_i_do": "Please try again in a few minutes.",
  }));
});

app.listen(3000);

(Thanks @junduck for creating the original NodeJS version.)

Python

Install cloudflare-error-page using pip.

pip install cloudflare-error-page

Then an error page can be generated using the render function provided by the package. (example.py)

import webbrowser
from cloudflare_error_page import render as render_cf_error_page

# This function renders an error page based on the input parameters
error_page = render_cf_error_page({
    # Browser status is ok
    'browser_status': {
        "status": 'ok',
    },
    # Cloudflare status is error
    'cloudflare_status': {
        "status": 'error',
        "status_text": 'Error',
    },
    # Host status is also ok
    'host_status': {
        "status": 'ok',
        "location": 'example.com',
    },
    # Position of the error indicator, valid options are 'browser', 'cloudflare', and 'host'
    'error_source': 'cloudflare',

    # Texts shown in the bottom of the page
    'what_happened': '<p>There is an internal server error on Cloudflare\'s network.</p>',
    'what_can_i_do': '<p>Please try again in a few minutes.</p>',
})

# Write generated webpage to file
with open('error.html', 'w') as f:
    f.write(error_page)

# Open the generated page in browser
webbrowser.open('error.html')

A demo server using Flask is available in flask_demo.py, and you can also see live demo here.

More Examples

Catastrophic infrastructure failure

params = {
    "title": "Catastrophic infrastructure failure",
    "more_information": {
        "for": "no information",
    },
    "browser_status": {
        "status": "error",
        "status_text": "Out of Memory",
    },
    "cloudflare_status": {
        "status": "error",
        "location": "Everywhere",
        "status_text": "Error",
    },
    "host_status": {
        "status": "error",
        "location": "example.com",
        "status_text": "On Fire",
    },
    "error_source": "cloudflare",
    "what_happened": "<p>There is a catastrophic failure.</p>",
    "what_can_i_do": "<p>Please try again in a few years.</p>",
}

Catastrophic infrastructure failure

Demo

Web server is working

params = {
    "title": "Web server is working",
    "error_code": "200",
    "more_information": {
        "hidden": True,
    },
    "browser_status": {
        "status": "ok",
        "status_text": "Seems Working",
    },
    "cloudflare_status": {
        "status": "ok",
        "status_text": "Often Working",
    },
    "host_status": {
        "status": "ok",
        "location": "example.com",
        "status_text": "Almost Working",
    },
    "error_source": "host",
    "what_happened": "<p>This site is still working. And it looks great.</p>",
    "what_can_i_do": "<p>Visit the site before it crashes someday.</p>",
}

Web server is working

Demo

FAQ

💡 How to show real user IP / Cloudflare Ray ID / data center location in the error page so that it looks more realistic?

Ray ID and user IP field in the error page can be set by ray_id and client_ip properties in the params argument passed to the render function. The real Cloudflare Ray ID and the data center location of current request can be extracted from the Cf-Ray request header (e.g. Cf-Ray: 230b030023ae2822-SJC). Detailed description of this header can be found at Cloudflare documentation.

To lookup the city name of the data center corresponding to the three letter code in the header, you can use a location list here

The demo server runs in our website did handle these. Take a look at this file for reference.

Use it at you own risk. There're still chances Cloudflare send you takedown request or take legal actions. But it depends on if you use it properly. It's better to change texts on the page so users know it's a joke.

If you do want to use an error page that pretends to be a Cloudflare one on your production environment, don't forget to fix your server quickly when it goes down so that they won't find that you are faking their error page. (See #4)

See also

Full Parameter Reference

{
    "html_title": "cloudflare.com | 500: Internal server error",
    "title": "Internal server error",
    "error_code": "500",
    "time": "2025-11-18 12:34:56 UTC",  // Current UTC time will be shown if empty

    // Configuration of "Visit ... for more information"
    "more_information": {
        "hidden": false,
        "text": "cloudflare.com", 
        "link": "https://www.cloudflare.com/",
        "for": "more information",
    },

    // Configuration of the Browser/Cloudflare/Host status block
    "browser_status": {
        "status": "ok", // "ok" or "error"
        "location": "You",
        "name": "Browser",
        "status_text": "Working",
        "status_text_color": "#9bca3e",
    },
    "cloudflare_status": {
        "status": "error",
        "location": "Cloud",
        "name": "Cloudflare",
        "status_text": "Error",
        "status_text_color": "#bd2426",
    },
    "host_status": {
        "status": "ok",
        "location": "Website",
        "name": "Host",
        "status_text": "Working",
        "status_text_color": "#9bca3e",
    },
    // Position of the error indicator, valid options are 'browser', 'cloudflare', and 'host'
    "error_source": "host",

    "what_happened": "<p>There is an internal server error on Cloudflare's network.</p>",
    "what_can_i_do": "<p>Please try again in a few minutes.</p>",

    "ray_id": '0123456789abcdef',  // Random hex string will be shown if empty
    "client_ip": '1.1.1.1',

    // Configuration of 'Performance & security by ...' in the footer
    "perf_sec_by": {
        "text": "Cloudflare",
        "link": "https://www.cloudflare.com/",
    },
}

cloudflare-error-page (donlon/cloudflare-error-page)

Searching Database…

这是什么?一个用于生成仿冒 Cloudflare 错误页面的工具,可以嵌入到你自己的网站中,用于开玩笑、恶作剧或测试。
这是网页工具、代码库,还是两者兼有?两者都是:既有可以在线交互式设计页面的编辑器,也有 NodeJS 和 Python 包,可以在你自己的服务器代码中以编程方式渲染页面。
我怎么在自己的应用里生成错误页面?通过 npm 或 pip 安装 “cloudflare-error-page” 包,然后调用其中的渲染函数(例如从提供的 example.py 或 Express/Flask 示例中调用)生成 HTML。
我一定要用 Node.js 或 Python 吗?两者都可以——项目分别提供了 NodeJS/npm 和 Python/pip 的包,并附有 Express 和 Flask 的集成示例。
把这个放到正式运行的网站上真的合法吗?这属于法律灰色地带,因为它使用了 Cloudflare 注册商标的标志和名称,并冒充官方错误页面;README 提醒使用风险自负,Cloudflare 可能发出下架通知或采取法律行动。
到底谁会用这个?想要搞笑或恶作剧错误页面的开发者,或是想测试伪造的“被 Cloudflare 拦截”页面效果的人;README 甚至还开玩笑说可以把真实的宕机伪装成恶作剧。
它是在客户端还是服务器端运行?它在服务器端运行:你用 npm 或 pip 包渲染 HTML 并对外提供,不涉及浏览器扩展或应用程序。
我能在假页面上显示真实的 Cloudflare Ray ID 或访客 IP 吗?可以,你可以用从真实的 Cf-Ray 请求头中提取的值来设置 rayid 和 clientip 参数;另外还有一份位置列表,可以把三字母的数据中心代码映射为城市名称。
刷新错误页面演示网站会怎样?所列的 cloudflare-error-page-3th.pages.dev 演示站会展示每一种 HTTP 状态码对应的错误页面,每次刷新都会随机显示其中一个。
这个项目有 React 版本吗?有。README 中链接了 oftx/cloudflare-error-page,这是一个 React 重新实现版本,可以直接部署到 Cloudflare Pages。
Creator
donlon
Size
1.6 MB
Stars
5.8K
Updated
CommitJul 06
Age
10mo
Commits · 90 Days