Caddy是基于Go语言编写,安装到Linux上无需任何依赖库,必须拷贝一个Caddy的可执行文件就可以开启一个静态的HTTP站点,由于这种轻量小巧静态的特性,特别适合配合一些小型应用使用。比如配合Aria2实现远程下载,配合munin实现服务器状态监控,还可以在关健时刻用来测试服务器端口是否通畅。caddy除了可以做一个静态的HTTP服务器之外,还可以像nginx一样做一个反向代理服务器。虽然性能不比NGINX,但是好处也有不少:
1、配置文件简单,1行就可以搞定一个反向代理服务器
2、安装部署方便,只要拷贝一个文件就可以了
3、如果联网,支持全自动的获得一个Let's Encrypt签发的免费HTTPS证书并自动配置上去,而且这是默认执行的,只需把自己的域名写在配置文件里就可以。
4、如果没联网,只需一行就可以签发一个自签名证书,一行升级到HTTPS呦。
5、日志文件与NGINX很像,很详细。
所以非常适合用于一些应急场合,比如有个站点或者某个端口突然要从HTTP改成HTTPS实现加密传输,有了Caddy之后一分钟以内就可以搞定。
场景一:公网上的服务器,已经有了域名,并且该域名就指向该服务器。想免费升级到HTTPS。
建立一个文件,名字交Caddyfile,按照下面这样写:
www.xxxx.net
gzip
proxy / localhost:8080
第一行填写域名,有了这个域名之后,caddy就会向Let's Encrypt发送这个域名,并且进行验证。,然后caddy就会自动申请HTTPS证书,开启80和443端口并进行侦听。
注意:只要写上了域名那么就默认开启了HTTPS服务,无需指定Caddy也会监听到443和80端口上。
最后一行的/是反向代理的范围,/表示全部反向代理,/api表示只有访问www.xxx.net/api的时候才进行反向代理。proxy语句可以写多行,分别对应不通的url地址。
执行之后,程序就会自动向Let's Encrypt请求,然后Let's Encrypt会验证你的域名对应的80和8080端口是否通向你当前的服务器,然后签发证书交给Caddy,一切都是自动的,需要你填写一个邮箱用于加密.下面是一部分,由于没有备案所80端口被运营商锁死,所以我的机器还不能注册HTTPS域名。
场景二:在上面的基础上想添加日志记录
让Caddy像NGINX一样记录访问日志。只需在下面加上日志的配置语句即可
www.xxxx.net
gzip
proxy / localhost:8080
log requests.log {
rotate_size 50 # Rotate after 50 MB
rotate_age 90 # Keep rotated files for 90 days
rotate_keep 20 # Keep at most 20 log files
}
场景3:内网机器,无需连到公网,只是想利用HTTPS来避免明文的传送,这是可以使用Caddy的自签名功能,Caddy自己制作CA证书,然后用这个CA证书签发相应的公钥和私钥。这样虽然使用浏览器会报错证书不够信任,但是达到了密文传输的效果
goodvpn.f3322.net
gzip
tls self_signed
proxy / localhost:8080
第一行的域名可以随便写,但是不要写localhost,关健 一句就在于 tls self_signed。有了这一行便会产生自签名证书。
同样也可以像场景2那样加入log的配置来产生日志文件。
注意如果使用了自签名,那么在启动Caddy要手动指定端口到443
caddy -port 443
启动Caddy特别容易,如果Caddyfile和Caddy在同一个文件夹下,那么只需执行Caddy就可以了
Caddy
如果不想使用443端口,那么也可以手动指定:
caddy -port 4430