企业级的 Web 服务器接触过:Nginx、Apache、IIS、Tomcat,前段时间打算将网路服务全部迁移到搬瓦工 VPS 上去,由于配置较低,就选用了一个开源的 Web 服务器: Caddy;它是一个 Go 编写的 Web 服务器,类似于 Nginx,完全可以作为中小型站点 Web 服务器。

特性

  • 自动 HTTPS:自动 TLS 功能,无需额外配置
  • 配置简便性:两种配置方式,简洁的 Caddyfile、功能丰富的 JSON
  • 配置灵活性:通过 JSON API,Caddy 允许实时更新配置
  • 代理能力:HTTP 反向代理功能强大且灵活
  • 静态资源托管:可以作为静态文件服务器
  • 全平台支持:支持 Linux、Windows、macOS 等操作系统
  • 高性能:Go 语言的开发,保证高性能和内存安全

    安装

    这些年的习惯,能用二进制的直接采用二进制安装
    1
    2
    3
    wget -c https://caddyserver.com/api/download --no-check-certificate -O caddy
    chmod a+x caddy
    mv caddy /usr/bin/
    添加系统服务vi /etc/systemd/system/caddy.service
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    [Unit]
    Description=Caddy
    Documentation=https://caddyserver.com/docs/
    After=network.target network-online.target
    Requires=network-online.target

    [Service]
    Type=notify
    User=caddy
    Group=caddy
    ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
    ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile --force
    TimeoutStopSec=5s
    LimitNOFILE=1048576
    PrivateTmp=true
    ProtectSystem=full
    AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE

    [Install]
    WantedBy=multi-user.target
    然后就可以使用 systemctl 启停 Caddy 服务了
    1
    2
    3
    4
    5
    systemctl daemon-reload
    systemctl enable caddy
    systemctl status caddy
    systemctl start caddy
    systemctl reload caddy

    配置

    Caddy 的配置文件可以用 JSON,不过个人感觉 Caddyfile 更简洁,也更加接近 nginx,没什么切换门槛

    基础语法

    |指令|说明|
    |—-|—-|
    |root|指定网站的根目录|
    |tls|用于自动获取和管理 TLS/SSL 证书|
    |proxy|用于配置反向代理|
    |rewrite|用于重写 URL|
    |gzip|开启 GZIP 压缩|
    |auth|配置基本的身份验证|
    |cache|配置缓存设置|
    |log|配置日志输出|

    示例配置

    vi /etc/caddy/Caddyfile
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    yuwei.cc {
    root * /var/www/html ##静态网站根目录
    tls work@yuwei.cc ##自动配置 TLS 证书
    encode gzip ##开启 gzip 压缩
    log /var/log/caddy/access.log combined ##指定日志文件
    ##反向代理到后端服务
    proxy /list 127.0.0.1:5244 {
    websocket ##WebSocket 协议
    transparent ##透明代理
    file_server browse ##启动静态资源
    }
    auth /admin user:password ##基本身份验证
    }
    ##配置带域名的反向代理
    list.vioe.cc {
    reverse_proxy 127.0.0.1:5244
    tls work@yuwei.cc
    log {
    output file /var/log/caddy/alist.log
    }
    }
    ##配置带域名的重定向
    vioe.cc {
    ##网站路由
    route {
    /static/* {
    gzip
    fileserver /var/www/static
    }
    /api/* {
    proxy / 127.0.0.1:5244
    }
    /* {
    redir https://baidu.com{uri}
    }
    }
    }
    更多配置见官方文档:Caddyfile Tutorial