what?可自动申请并配置证书!这款web服务能这么牛逼?

2025-04-27

在部署网站的时候,想要把自己的网站由http变成https加密通信,以提高安全性。

  • 其中少不了的步骤便是去申请一个SSL/TLS证书,虽然腾讯云等云服务厂商提供免费的证书,但是有效期只有90天,抠搜腾讯最近还把有效期减到了60天。

  • 申请好后,还要把证书下载下来,部署到NGINX,APACHE等web服务器,甚是麻烦。

  • 有没有这样一个服务器,可以直接一步到位吗?既然都这么问了,答案肯定是有的!

  • caddy,一款可以自动申请证书,自动将你的网站变为https的web服务器

什么是 Caddy?

  • Caddy 是一个开源的现代 Web 服务器,主要特点是:

    • 自动获取和续签 HTTPS 证书(Let's Encrypt)

    • 简单好用的配置(支持 Caddyfile 和 JSON)

    • 内置反向代理、负载均衡、文件托管、重定向等功能

    • 默认安全设计(HTTP/2、TLS 1.3、OCSP Stapling 等全开)

    • 原生支持模块化(可以按需扩展)


Caddy 的常见应用场景

  • 快速搭建 HTTPS 网站

  • 做反向代理,转发到后端服务(比如 Node.js、Django、Flask)

  • 自动处理 TLS 证书,无需手动申请

  • 简单部署静态文件网站

  • 内网穿透、API 网关、负载均衡等

caddy使用

1. 静态网站托管

example.com {
    root * /var/www/html
    file_server
}
  • root * /var/www/html:设置站点根目录

  • file_server:启用文件服务器(自动列目录、返回静态文件)


2. 反向代理(单个/多个后端)

单个后端:

example.com {
    reverse_proxy localhost:8000
}

多个后端,负载均衡:

example.com {
    reverse_proxy backend1:8000 backend2:8000 backend3:8000
}
  • 支持自动健康检查负载均衡策略(如随机、最少连接等)


3. 自定义日志输出

{
    log {
        output file /var/log/caddy/access.log
        format json
        level INFO
    }
}

example.com {
    reverse_proxy localhost:8000
}
  • output file:输出到文件

  • format json:日志格式(可选 jsonconsole

  • level INFO:日志等级(可选 DEBUG INFO WARN ERROR

访问日志(单独开)示例:

example.com {
    log {
        output file /var/log/caddy/example_access.log
        format console
    }
    reverse_proxy localhost:8000
}

4. 自定义 404 页面

example.com {
    root * /var/www/html
    file_server
    handle_errors {
        @404 {
            expression {http.error.status_code} == 404
        }
        rewrite @404 /404.html
        file_server
    }
}
  • handle_errors:捕获错误码

  • rewrite:重写到你的自定义页面(比如 /404.html

要在 /var/www/html/ 目录下放一个 404.html 文件。


5. HTTP重定向到HTTPS(自动)

其实 Caddy默认就会自动把HTTP跳转到HTTPS,无需额外配置。
但如果你想显式指定

http://example.com {
    redir https://example.com{uri} permanent
}
  • {uri} 是路径和查询参数,保证跳转时不丢失原请求路径。


6. 添加自定义响应头

example.com {
    header {
        X-Frame-Options "DENY"
        X-Content-Type-Options "nosniff"
        Referrer-Policy "no-referrer"
    }
    reverse_proxy localhost:8000
}
  • header 可以添加、删除、修改响应头,增强网站安全性。


7. 限速、防爬虫(简单示例)

限速:

example.com {
    reverse_proxy localhost:8000
    encode gzip

    # 简单限速,比如每秒最多响应100个请求
    rate_limit {
        zone myzone 5s 500
        key {remote_ip}
    }
}

👉 注意:限速需要使用 caddy-rate-limit 插件,默认没有内置。


8. 自定义超时设置

example.com {
    reverse_proxy localhost:8000 {
        flush_interval -1
        transport http {
            read_buffer 4096
            write_buffer 4096
            read_timeout 10s
            write_timeout 10s
            keepalive 30s
        }
    }
}

example.com { reverse_proxy localhost:8000 { flush_interval -1 transport http { read_buffer 4096 write_buffer 4096 read_timeout 10s write_timeout 10s keepalive 30s } } }

  • 配置底层 HTTP 连接超时,更灵活控制反向代理行为。


🔥 小结

功能

简述

静态网站

root + file_server

反向代理

reverse_proxy

访问日志

log 指定输出

错误页面

handle_errors 重写

安全头部

header 设置

HTTPS强制

默认自动;也可以自己用 redir

高级优化

rate_limit、超时设置、gzip压缩等

docker一键部署

使用docker-compose一键快速部署caddy

version: '3'

services:
  caddy:
    image: caddy:latest
    container_name: caddy
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./caddy_data:/data
      - ./caddy_config:/config
      - ./logs:/var/log/caddy

PREV
docker网络导致的docker compose down执行问题
NEXT
为加密萌新准备的交易指南:保护本金,牛尾不要追加投入--Eugene Ng Ah Sio