飞鱼

恭喜你发现了一个菜鸡博主。

使用 Caddy 让你的网站获得永久免费的 HTTPS

飞鱼 2020年02月24日 01:29:51

Caddy 是一款使用 Go 语言编写的开源 Web 服务器,默认支持 HTTP/2。

使用 Caddy 你可以简单、快速的部署 HTTPS 服务。

SSL证书的申请、续约都可以完全无感知,自动完成!

操作环境 Debian/Ubuntu/CentOS

* 当然 caddy 也可以在 Windows 上运行,文章的最后会讲

安装方法 1:使用官方安装脚本

curl https://getcaddy.com | bash -s personal
# 或者
wget -qO- https://getcaddy.com | bash -s personal

配置caddy

mkdir /etc/caddy
touch /etc/caddy/Caddyfile
chown -R root:www-data /etc/caddy

配置 systemd

curl -s  https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service  -o /etc/systemd/system/caddy.service
systemctl daemon-reload
systemctl enable caddy.service
systemctl status caddy.service

安装方法 2:使用一键脚本安装,并自动配置 caddy

wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh

常用操作

使用官方脚本的

# 启动
systemctl start caddy.service

# 停止
systemctl stop caddy.service

# 重启
systemctl restart caddy.service

# 重新加载
systemctl reload caddy.service

使用一键脚本的

# 启动
/etc/init.d/caddy start

# 停止
/etc/init.d/caddy stop

# 重启
/etc/init.d/caddy restart

如何配置 Caddyfile

# 使用官方脚本安装的
nano /etc/caddy/Caddyfile

# 使用一键脚本安装的
nano /usr/local/caddy/Caddyfile

简单配置示例

假设域名是 feiyu.me

使用 /home/wwwroot/mywebsite 作为根目录搭建一个静态站点

feiyu.me
root /home/wwwroot/mywebsite
gzip
tls admin@feiyu.me

重新启动 caddy

/etc/init.d/caddy restart

OK!至此一个简单的 HTTPS Web 服务,已经搭建完成。
caddy 会自动申请由 Let's Encrypt 颁发的证书,并自动配置好 HTTPS,而且还会在证书即将到期时自动完成续约。整个过程全部在后台静默完成


如何使用 caddy 进行反向代理

假如 Node.js 进程运行在 3000 端口上,只需要这样配置

feiyu.me
proxy / 127.0.0.1:3000
gzip
tls admin@feiyu.me

代理所有到 FastCGI 应答器的请求给 php

fastcgi / /run/php/php7.0-fpm.sock php {
    root /home/wwwroot/phpweb
}

那么 caddy 默认支持 HTTP/2 、反向代理、php 又能简单快速的部署 HTTPS 服务,它就没有什么缺点了吗?

答案是:有的。caddy 虽然很方便,但是就目前的版本来说,其反向代理性能和并发能力仍然不如 Nginx

不过对于个人的小站来说,这点性能差距基本上可以忽略不计。

caddy 的另外一个缺点:虽然它可以自动申请并配置SSL证书,但是其申请数量是有上限的。
大概每天同一个IP 可以申请10张,如果超过这个数量,那么 caddy 将无法启动

当然,这个问题也是可以轻松解决的。只需要通过手工指定证书文件和私钥即可。


手工指定SSL证书和私钥

tls /ssl/cert.pem /ssl/key.pem

或者你也可以选择关闭 HTTPS,但是不建议你这样做

tls off

使用 caddy 同时监听多个站点

https://www.feiyu.me {
	proxy / 127.0.0.1:3000
	gzip
	tls /ssl/crt.pem /ssl/key.pem
}

https://bbs.feiyu.me {
	fastcgi / /run/php/php7.0-fpm.sock php {
		root /home/wwwroot/phpwind
	}
	gzip
	tls admin@feiyu.me
}

配置 301 自动跳转

http://feiyu.me {
	redir https://www.feiyu.me{uri}
}

启用 HSTS

header / {
	Strict-Transport-Security "max-age=31536000;"
}

完整的配置示例

######### feiyu.me ##########
https://www.feiyu.me {
	proxy / 127.0.0.1:3000
	gzip
	tls /home/ssl/feiyu.me/fullchain.pem /home/ssl/feiyu.me/key.pem
	header / {
		Strict-Transport-Security "max-age=31536000;"
		X-XSS-Protection "1; mode=block"
		X-Content-Type-Options "nosniff"
		X-Frame-Options "DENY"
	}
}
https://feiyu.me {
	tls /home/ssl/feiyu.me/fullchain.pem /home/ssl/feiyu.me/key.pem
	redir https://www.feiyu.me{uri}
}
http://feiyu.me {
	redir https://www.feiyu.me{uri}
}
http://www.feiyu.me {
	redir https://www.feiyu.me{uri}
}


如何在 Windows 上使用 Caddy

首先我们先下载 caddy 的安装包

Github 下载地址:https://github.com/caddyserver/caddy/releases

建议下载稳定版 Latest release 。目前最新的稳定版是 1.0.4

下载并解压。在 caddy.exe所在的目录内新建一个文本

重命名为Caddyfile。对,没有后缀名

使用记事本或者 Notepad++ 打开它,配置文件的写法都是一样的,没有区别。

配置完成后,双击主程序 caddy.exe 即可。


关于插件

Caddy 目前支持的插件还不是很多,但是已经能满足基本需求。

你可以根据自己的需要在官方网站上进行下载。

具体,这里就不铺开讲了,建议参阅官方文档



© 2020 飞鱼的博客