Sign inSign up

mrxianyu/error_pages

By mrxianyu

Updated 10 months ago

Image
0

1.2K

mrxianyu/error_pages repository overview

Custom Error Pages Service

这是一个基于 Golang 编写的高性能、高并发 HTTP 错误页面服务器。专为配合 Caddy 2、Nginx 等反向代理服务器使用,用于提供美观且统一的自定义错误页面(如 404, 500, 502 等)。

✨ 特性

  • 高性能:启动时自动将常用状态码页面预渲染至内存,响应请求时零内存分配。
  • 单文件:HTML 模板直接嵌入二进制文件,无外部文件依赖。
  • 轻量级:基于 scratch 基础镜像构建,Docker 镜像极小。
  • 多架构:支持 linux/amd64 和 linux/arm64。
  • 可配置:支持通过环境变量修改监听端口。

🚀 快速开始

Docker 运行 (推荐)

默认监听 80 端口:

docker run -d \
  --name error-pages \
  -p 8080:80 \
  mrxianyu/error_pages:latest

Docker Compose

services:
  error-pages:
    image: mrxianyu/error_pages:latest
    container_name: error-pages
    restart: always
    environment:
      - PORT=8080  # 可选:修改容器内部监听端口
    ports:
      - "8080:8080"

⚙️ 配置说明

环境变量默认值说明
  • PORT:80 设置服务监听的端口号。非 Root 运行建议设为 >1024。

🔌 Caddy 2 集成指南

这是本项目的核心用法。在你的 Caddyfile 中配置 handle_errors,将错误请求拦截并转发给此服务。注意:replace_status 指令是关键,它确保最终返回给浏览器的状态码是正确的(例如 404),而不是 Go 服务返回的 200。

:80 {
    # 你的正常业务反代
    reverse_proxy /api/* localhost:9000
    file_server

    # --- 错误页面集成配置 ---
    handle_errors {
        # 1. 将请求路径重写为错误码 (例如 /404, /503)
        rewrite * /{err.status_code}
        
        # 2. 转发给 error-pages 服务
        # 假设 docker 容器名为 error-pages,端口为 80
        reverse_proxy http://error-pages:80 {
            header_up Host {host}
            
            # 3. 强制使用原始错误码覆盖后端返回的 200 OK
            replace_status {err.status_code}
        }
    }
}

🛠️ 本地构建

如果你需要修改代码并自行构建:

# 编译
CGO_ENABLED=0 go build -ldflags="-s -w" -o error_pages .

# 运行
./error_pages

Tag summary

Content type

Image

Digest

sha256:3156817f3

Size

2.1 MB

Last updated

10 months ago

docker pull mrxianyu/error_pages