GitHub 42k+星,这个号称超越Nginx的Web服务器有点厉害

《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐是一个使用GO开发的可扩展Web服务器——Caddy。

GitHub42k+星,这个号称超越Nginx的Web服务器有点厉害

Caddy是一个强大且可扩展的Web服务器、代理服务器。Caddy使用Go语言开发,支持HTTP/2IPv6、Markdown、WebSockets、FastCGI、模板等等,目前已经超过42k star。

功能特性

  • 相比Nginx,使用Caddyfile配置更加简单,同样也支持JSON配置
  • 默认支持HTTP/2协议,无需单独配置
  • 自动获取和更新TSL/OCSP证书,无需担心过期宕机问题
  • 高度可扩展的模块化架构让 Caddy 做任何事情都不会臃肿
  • 可以在任何平台运行,无需外部依赖
  • 基于Go开发,保证内存安全
  • 可轻松扩展到集群环境

安装

Debian、Ubuntu、Raspbian:

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
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

Fedora 或 RHEL/CentOS 8:

dnf install 'dnf-command(copr)'
dnf copr enable @caddy/caddy
dnf install caddy

RHEL/CentOS 7:

yum install yum-plugin-copr
yum copr enable @caddy/caddy
yum install caddy

API使用入门

运行在2015端口并输出 Hello, world!

启动Caddy:

$caddy start

添加一个配置:

$curl localhost:2019/load \
    -H "Content-Type: application/json" \
    -d @- << EOF
    {
        "apps": {
            "http": {
                "servers": {
                    "hello": {
                        "listen": [":2015"],
                        "routes": [
                            {
                                "handle": [{
                                    "handler": "static_response",
                                    "body": "Hello, world!"
                                }]
                            }
                        ]
                    }
                }
            }
        }
    }
EOF

浏览器加载:

$curl localhost:2015
Hello, world!

反向代理简单配置

运行以下命令:

caddy reverse-proxy --to 127.0.0.1:9000

如果没有权限,可以绑定较高端口代理:

caddy reverse-proxy --from :2016 --to 127.0.0.1:9000

在Caddy目录中创建一个Caddyfile并包含以下内容:

localhost
reverse_proxy 127.0.0.1:9000

然后,从同一目录运行:

caddy run

运行后,可以发送请求到 https://localhost 查看是否正常工作。

更改代理地址也很容易:

:2016
reverse_proxy 127.0.0.1:9000

更改完成后,更新启动Caddy即可在localhost:2016访问代理。

Caddyfile结构

caddy大部分配置都基于独创的Caddyfile完成,以下是它的结构:

GitHub42k+星,这个号称超越Nginx的Web服务器有点厉害

关键词:

  • Global options block 服务器全局配置:可用于配置是否启用 HTTPS 和 Admin API 等
  • Snippet 可以复用的配置片段:定义好后认可以通过 import 关键字引用
  • Site Block 单个网站配置:通过 file_server 可以配置静态代理,通过 reverse_proxy 可以配置动态代理
  • Matcher definition 匹配定义:默认情况下指令会产生全局影响,通过它可以指定影响范围
  • Comment 注释:使用#符号开头
  • Site address 网站地址:默认使用 HTTPS ,如需开启 HTTP ,需要指定 http:// 开头
  • Directive 指令:指令赋予了 Caddy 强大的功能

—END—

开源协议:Apache2.0

开源地址:https://github.com/caddyserver/caddy