官方安装文档

Install - Caddy Documentation

简介

Caddy 是一个现代的开源 Web 服务器,具有以下几个主要特点:

  1. 自动化 HTTPS
    Caddy 自动为所有托管的网站配置 HTTPS,使用 Let's Encrypt 提供的证书。这意味着你无需手动处理证书的生成和续期,极大地简化了安全配置。
  2. 易于配置
    Caddy 使用一个简单的配置文件(Caddyfile),使得配置反向代理、负载均衡、路由等功能变得直观易懂。其语法设计使得用户可以快速上手。
  3. 反向代理
    Caddy 可以轻松配置为反向代理,允许你将请求转发到其他服务或应用程序。这对于微服务架构或多服务应用程序特别有用。
  4. 插件系统
    Caddy 支持插件,可以扩展其功能,例如身份验证、速率限制、监控等。这使得 Caddy 可以适应各种需求。
  5. 支持 HTTP/2 和 QUIC
    Caddy 默认支持 HTTP/2 和 QUIC,这些现代协议提供了更好的性能和用户体验。
  6. 多平台支持
    Caddy 可以在多种操作系统上运行,包括 Linux、Windows 和 macOS。
  7. 丰富的社区和文档
    Caddy 拥有活跃的社区和丰富的文档,用户可以轻松找到所需的支持和示例。

适用场景

  • 静态网站托管:Caddy 非常适合托管静态网站。
  • API 网关:可以用作 API 的反向代理。
  • 微服务架构:在微服务环境中管理请求和负载均衡。
  • 开发和测试环境:快速搭建和测试本地开发环境。

安装

以Debian12为例,依次执行命令

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl

curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg

curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list

sudo apt update

sudo apt install caddy

配置文件路径

/etc/caddy/Caddyfile

服务管理

# 启动Caddy
systemctl start caddy

# 开机自启
systemctl enable caddy

# 重启Caddy2
systemctl restart caddy

# 停止Caddy2
systemctl stop caddy

# 重载配置Caddy配置文件(修改配置文件后执行)
systemctl reload caddy

# 查看Caddy2运行状态
systemctl status caddy

配置示例

# 反向代理
example.com {
    reverse_proxy 127.0.0.1:8080 #这里输入你想反代的服务器IP和端口
    encode gzip
}

# 反向代理+基本认证
example.com {
    basicauth / username password
    reverse_proxy localhost:3000
}

# 反向代理+负载均衡
example.com {
    reverse_proxy backend1:3000 backend2:3000
}

# 重定向
example.com {
    redir https://naiyous.com{uri}
}

更多配置

1. 负载均衡

你可以通过指定多个后端服务器来实现负载均衡。Caddy 会自动在这些服务器之间分配流量。

example.com {
    reverse_proxy backend1:3000 backend2:3000 {
        lb_policy round_robin
    }
}

2. 路由和重定向

你可以配置不同的路由和重定向规则。

example.com {
    reverse_proxy /api/* localhost:3001
    reverse_proxy /app/* localhost:3002
    redir /old-path /new-path 301
}

3. WebSocket 支持

Caddy 支持 WebSocket 代理。你只需像普通的 HTTP 请求一样配置。

example.com {
    reverse_proxy /ws/* localhost:3000 {
        header_up X-Real-IP {remote}
        header_up X-Forwarded-For {remote}
        header_up X-Forwarded-Proto {scheme}
    }
}

4. SSL/TLS 配置

Caddy 默认启用 HTTPS。如果你需要自定义 SSL/TLS 设置,可以在 Caddyfile 中进行配置。

example.com {
    reverse_proxy localhost:3000
    tls {
        cert_file /path/to/cert.pem
        key_file /path/to/key.pem
    }
}

5. 基于路径的反向代理

你可以根据请求的路径将请求代理到不同的服务。

example.com {
    reverse_proxy /service1/* localhost:3001
    reverse_proxy /service2/* localhost:3002
}

6. 自定义错误页面

你可以配置自定义错误页面。

example.com {
    reverse_proxy localhost:3000
    handle_errors {
        respond 404 "Sorry, the page was not found" 404
    }
}

7. 添加 HTTP 头

你可以在反向代理请求中添加或修改 HTTP 头。

example.com {
    reverse_proxy localhost:3000 {
        header_up X-Forwarded-For {remote}
        header_up X-Real-IP {remote}
    }
}

8. 使用插件

Caddy 有许多插件可以扩展其功能,比如身份验证、速率限制等。你可以根据需要安装这些插件并在 Caddyfile 中配置。

9. 设置速率限制

你可以对请求设置速率限制,以防止滥用。

example.com {
    reverse_proxy localhost:3000
    rate_limit {
        zone rate_limit 10r/s
    }
}

10. 访问日志和错误日志

你可以启用访问日志和错误日志来监控请求和错误。

example.com {
    reverse_proxy localhost:3000
    log {
        output file /var/log/caddy/access.log
        format json
    }
    log {
        output file /var/log/caddy/error.log
    }
}

11.真实ip

  • header_up:用于将请求头信息添加到代理请求中。
  • X-Real-IP:直接传递客户端的 IP 地址。
  • X-Forwarded-For:包含客户端的 IP 地址链,允许后端识别原始客户端 IP。
  • X-Forwarded-Proto:指示原始请求的协议(HTTP 或 HTTPS)
example.com {
    reverse_proxy localhost:3000 {
        header_up X-Real-IP {remote}
        header_up X-Forwarded-For {remote}
        header_up X-Forwarded-Proto {scheme}
    }
}
最后修改:2024 年 09 月 30 日
如果觉得我的文章对你有用,请随意赞赏