Caddy - Go語言HTTP/2服務器

Caddy是一个由Go语言编写的Web服务器软件,可实现HTTPS全自动部署。

本篇文章发布时,该博客正运行在Caddy之上。

简介

Caddy是一个由Go语言编写的Web服务器软件,得益于Go语言强大的网络并发编程的能力,Caddy性能优异、部署方便,一般情况下可代替nginx。

主要特性:

  • Caddyfile易于配置
  • 全自动实现HTTPS(基于Let’s Encrypt)
  • 默认启用HTTP/2
  • 支持虚拟主机的实现
  • 可启用实验性的QUIC
  • TLS会话更加安全
  • 方便使用插件进行扩展
  • 支持全平台部署

下载安装:

用法示例

在某一目录中新建一个Caddyfile文件,写入配置,然后执行caddy即可执行。

如果想要启用实验性的QUIC支持,则使用caddy -quic启用即可。

Caddyfile配置文件示例(所有配置可以写在同一文件内):

HTTP跳转HTTPS:

www.website.com:80 {
    redir https://www.website.com{uri}
}

静态网站 Caddyfile:

www.website.com:443 {
    tls C:\ssl\www.website.com\crt C:\ssl\www.website.com\key
    gzip
    header / Strict-Transport-Security "max-age=31536000"
    root C:\www\www.website.com\
}

反向代理 Caddyfile:

www.website.com:443 {
    tls C:\ssl\www.website.com\crt C:\ssl\www.website.com\key
    gzip
    header / Strict-Transport-Security "max-age=31536000"
    proxy / localhost:3999
    proxy /ws localhost:3999 {
        websocket
    }
}

PHP7.1 Caddyfile:

www.website.com:443 {
    tls /home/ssl/www.website.com/crt /home/ssl/www.website.com/key
    root /home/www/www.website.com
    gzip
    fastcgi / /run/php/php7.1-fpm.sock php
}

以上配置文件都假设已经有SSL证书了,若没有则参考官方文档自动配置SSL/HTTPS。
另外,Caddy也支持ECC证书,可以直接通过Let’s Encrypt签发:
ECC Caddyfile:

yourdomain.com {
        tls youremail@domain.com {
                key_type p384
        }
        ...
}