0°

简单了解一下 Caddy:新兴的 Web 服务器

Caddy服务器是一个开源的,使用 Golang 编写,支持 HTTP/2 的 Web 服务端。它使用Golang 标准库提供HTTP 功能。 Caddy 一个显著的特性是默认启用HTTPS。它是第一个无需额外配置即可提供HTTPS 特性的Web 服务器。

Caddy 是一个像 Apache,nginx,或 lighttpd 的 web 服务器。你要问 nginx 已经很好了,为什么要用 Caddy 呢?我觉得 Caddy 最大的特点是用起来简单,然后呢,它还有下面这些开箱即用的特性:

  • HTTP/2 全自动支持 HTTP/2 协议,无需任何配置。
  • Auto HTTPS Caddy 使用 Let’s Encrypt 让你的站点全自动变成全站 HTTPS,无需任何配置。当然你想使用自己的证书也是可以的。
  • Multi-core 因为 Caddy 是 golang 写的,所以当然可以合理使用多核啦。
  • IPv6 完全支持 IPv6 环境.
  • WebSockets Caddy 对 WebSockets 有很好的支持.
  • Markdown 自动把 md 转成 HTML,当然,我后续要给大家介绍更强大的 hugo 来干这个事情.
  • Logging Caddy 对 log 格式的定义很容易,更好的满足你日志收集的需求。
  • Easy Deployment 得益于 go 的特性,Caddy 只是一个小小的二进制文件,没有依赖,很好部署。
新兴的 web 服务器 caddy

那么在什么场景下适合尝试使用 Caddy 呢,我推荐从以下场景开始:

  • 作为静态页面的 WebServer
  • 转发 fastcgi 请求到 php-fpm 服务,比如替换 Apache 或 Nginx 作为 WordPress 的 server
  • 反向代理,管理多个站点
  • 微服务的 API Gateway,我会专门写一篇文章。
  • 有些在 Nginx 上难以开发的需求,为 Caddy 写插件太方便了。
新兴的 web 服务器 caddy

入门

安装和下载 Caddy

把 Caddy(下载)放到系统的 PATH 中,让其可以直接执行。比如 Linux 中一般习惯放到/usr/local/bin

简单测试

  • 找一个做测试的临时目录,生成一个测试主页。echo"hello world">index.html
  • 执行 Caddy
  • 在另一个终端 curl localhost:2015 或在浏览器访问(http://localhost:2015)

Caddyfile

Caddy 的一个特色就是配置简单,nginx 的配置文件群已经越看越晕了。我们来试试:

在当前目录创建这样一个叫 Caddyfile 的文件:

localhost:2020
gzip

这次,我们改变了端口,并且启用了 gzip 自动压缩数据。运行 Caddy,去你指定的地址看看吧。

说一句,Caddy 的潜规则是找当前目录叫 Caddyfile 的文件,你也可以用参数指定文件和路径。

更专业一点

我们随便说点高级功能,其实 Caddy 的文档挺不错的,看文档就可以了解各种功能。

自动 HTTPS

如果你满足这些条件,你用 Caddy 启动的应用将自动获得 HTTPS,不用你买证书了,这都是 Let's Encrypt 的功劳。

  • host 那里要填一个域名,不能是 localhost 或 IP
  • 不要用冒号手动指定端口
  • 不要在域名前手动声明 http
  • 没在配置里关掉 TLS 或者声明用自己的证书但是还没配好
  • Caddy 有权限绑定 80 和 443 端口

前边都能懂,说下最后一条。在 init 文件夹的启动配置教程里都有,一般建议你用 www-data 用户启动服务,你不是 root 但是 Linux 依然可以让你绑定 80 端口,只需要执行

setcap cap_net_bind_service=+ep Caddy

具体看文档吧。

多站点

你可能想,之前用 nginx 主要是为了支持多站点,Caddy 当然也是可以的,你只需要配置若干域名,把每个域名的配置写在后边的大括号配置块里就行了。下一个例子里就有。

PHP or WordPress

据说全世界四分之一的站点都是 WordPress 搭建的,而 PHP 公认是世界上最好的语言。Caddy 还没有完全支持 unix socket 通讯呢,赶忙先把 PHP 支持了再说。

这是我自己博客的配置片段,我的荒芜的非技术博客依然用的 wordpress。timeouts 关键字是我摸索出来的,官方示例没有,不设置这个国内升级插件什么的根本成功不了。tls 其实用默认值是可以的,但是后台会有一堆落后的搜索引擎和爬虫报错,于是我调低了一点。另外我还把 www 定向到了裸域名,大家一般都这样做,或者反过来。

xiafeng.net {
    root /data/xiafeng/public
    timeouts 10m
    gzip
    tls {
        protocols tls1.0 tls1.2
    }
    fastcgi / unix:/var/run/php/php7.0-fpm.sock php
    rewrite {
        if {path} not_match ^\/wp-admin
        to {path} {path}/ /index.php?_url={uri}
    }
}

www.xiafeng.net {
    redir https://xiafeng.net
}

开机启动

因为大部分发行版目前还没办法直接安装 Caddy,开机启动可能需要你自己动手啦。

在你下载的压缩包中有一个 init 文件夹,里边有 Mac,Linux,FreeBSD 的开机启动配置帮助,还有示例脚本,可以根据你的要求再 DIY 一下。

Caddy 和 Nginx 的对比

Nginx 功能多,成熟稳定;

Caddy 功能也在慢慢增多,试着以不同方式实现 Nginx 的功能和新鲜的功能;

SSLDocker 专注于 HTTPS 管理和反向代理。

如果说 Nginx 是成功中年人士,则 Caddy 是年轻高富帅,SSLDocker 是嫩屌丝。

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论