闲碎记事本 闲碎记事本
首页
  • JAVA
  • Cloudflare
  • 学完再改一遍UI
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

YAN

我要偷偷记录...
首页
  • JAVA
  • Cloudflare
  • 学完再改一遍UI
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • java

  • linux

  • docker

  • redis

  • nginx

  • mysql

  • 其他

  • 环境搭建

    • JDK安装
    • stable-diffusion-webui 安装
    • Roop安装使用
    • nexus部署和使用
    • Maven配置示例
    • Conda使用
    • Caddy操作指南
      • Caddy操作指南
        • 基础命令
        • 检查配置文件
        • 前台启动
        • 作为服务启动
        • 重新加载配置
        • docker-compose 安装
        • Caddyfile
        • 最简单示例
        • 反代多个站点(基于子域)
        • 自动HTTPS(使用域名)
        • 自签证书(无域名)
        • HTTP → HTTPS 手动跳转(特殊端口)
        • 启用静态文件服务
        • 路由控制
        • 启用压缩和跨域
        • 基础认证(HTTP Basic Auth)
        • 限制正文大小
        • 配置全局
        • 配置站点
      • tls属性示例
        • 字段说明
    • Alist使用
  • 知识库
  • 环境搭建
YAN
2025-04-25
目录

Caddy操作指南

# Caddy操作指南

  • Caddy (opens new window) 是一款现代化、自动化、简洁的Web服务器。
  • 支持自动TLS证书管理、反向代理、静态文件服务等。

# 基础命令

# 检查配置文件

caddy validate --config /path/to/Caddyfile

提示

如果不带--config参数,默认加载当前目录下Caddyfile,否则加载系统默认路径。

操作系统 默认(相对安装路径)
Linux caddy/Caddyfile
Windows Caddy/Caddyfile
macOS caddy/Caddyfile

# 前台启动

caddy run

# 作为服务启动

caddy start

# 重新加载配置

caddy reload --config /path/to/Caddyfile

# docker-compose 安装

version: '3.8'
services:
  caddy:
    image: caddy:2
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./caddy_data:/data
      - ./caddy_config:/config
    networks:
      - prod # 指定网络


networks:
  prod:
    external: true # 使用现有网络

# Caddyfile

# 最简单示例

:80 {
    #代理到8080
    reverse_proxy localhost:8080
}

# 反代多个站点(基于子域)

a.example.com {
    reverse_proxy localhost:5244
}

b.example.com {
    reverse_proxy localhost:8080
}

c.example.com {
    reverse_proxy localhost:9000
}

# 自动HTTPS(使用域名)

首先需要一个正常解析到IP的域名吗,这是必要条件

example.com {
    tls you@example.com #通知邮箱
    #代理到8080
    reverse_proxy localhost:8080
}

上面示例:HTTP会强制调整HTTPS (使用默认 80 → 443)

# 自签证书(无域名)

生成自签名证书

openssl req -x509 -newkey rsa:2048 -nodes -keyout /etc/caddy/ssl/key.pem  -out /etc/caddy/ssl/cert.pem -days 365 -subj "/CN=your.ip.address"
:8443 {
    tls /etc/caddy/ssl/cert.pem /etc/caddy/ssl/key.pem
    reverse_proxy localhost:8080
}

# HTTP → HTTPS 手动跳转(特殊端口)

example.com:8080 {
    redir https://example.com:8443{uri}
}

example.com:8443 {
    tls you@example.com
    reverse_proxy localhost:5244
}

# 启用静态文件服务

example.com {
    # * 匹配所以请求
    # 静态资源存放目录
    root * /path/to/your/files
    file_server
}

# 路由控制

example.com {
    redir /old-url /new-url 301

    handle_path /blog/* {
        reverse_proxy localhost:8080
    }

    handle_path /api/* {
        reverse_proxy localhost:5000
    }

    handle * {
        root * /var/www/html
        file_server
    }
}

# 启用压缩和跨域

example.com {
    encode gzip
    header {
        Access-Control-Allow-Origin "*"
        X-Content-Type-Options "nosniff"
    }
    reverse_proxy localhost:5244
}

# 基础认证(HTTP Basic Auth)

example.com {
    route {
        basicauth / admin JDJhJDEyJHZiRzZwbjdVZUl4U0ZBQnM3L3lZZVJ4RnVaZlFlZ29IZUtIM0hoR0FZME1XNGRtd01yCnY2Vjhi
        reverse_proxy localhost:5244
    }
}

可用caddy hash-password 生成hash密码

# 限制正文大小

# 配置全局

{
    # 全局配置(可选)
    # 限制所有请求的最大请求体大小
    # 例如,限制请求体至10MB
    request_body {
        max_size 10MB
    }
}

# 配置站点

example.com {
    request_body {
        max_size 5MB
    }
    # 其他配置,比如反向代理或文件服务
    reverse_proxy localhost:8080
}

超出限制处理

example.com {
    # 范围:限制请求体最大为10MB
    @limit {
        request_body {
            max_size 10MB
        }
    }
    handle @limit {
        # 拒绝超出限制的请求
        respond "Payload Too Large" 413
    }
    reverse_proxy localhost:8080
}

基于匹配条件的限制

example.com {
    @large_body {
        header Content-Length * # 只限制具有Content-Length的请求
    }
    handle @large_body {
        request_body {
            max_size 20MB
        }
        # 后续中间件或响应
        reverse_proxy localhost:8080
    }

    # 对非匹配的请求继续处理
    handle {
        reverse_proxy localhost:8080
    }
}

# tls属性示例

tls <email> {
    ca <acme-server-url>
    dns <provider>
    on_demand
    resolvers <ip>...
    ask <url>
    alpn <proto>...
    protocols <version>...
    client_auth {
        mode <request|require|verify_if_given|require_and_verify>
        trusted_ca_cert_file <path>
        trusted_ca_cert_files <paths...>
    }
    cert_file <path/to/cert.pem>
    key_file <path/to/key.pem>
}

# 字段说明

配置项 描述
tls you@example.com 指定邮箱(用于 Let's Encrypt 注册)
ca 自定义 ACME CA(比如 Let's Encrypt 以外的)
dns 启用 DNS 认证(需要 Caddy 插件)
on_demand 启用按需证书(首次访问时申请)
resolvers 自定义 DNS 解析器(默认用系统)
ask 访问特定 URL 判断是否允许发证书
alpn 限制允许的 ALPN 协议(HTTP/2, h3 等)
protocols 限制支持的 TLS 版本(如 tls1.2 tls1.3)
client_auth 启用客户端证书认证(双向 TLS)
cert_file / key_file 手动指定证书和私钥(跳过 ACME)
上次更新: 2025/05/14, 01:34:05
Conda使用
Alist使用

← Conda使用 Alist使用→

最近更新
01
Swap空间
04-22
02
Alist使用
04-21
03
SSE示例
04-21
更多文章>
Theme by Vdoing | Copyright © 2022-2025 YAN | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式