Caddy的使用真的太傻瓜了!
参考文章:
- 入门: Caddy中文文档
- 中阶: 3mile:如何在CentOS 7上安装和配置Caddy
- Caddyfile的配置:liuzhichao:替换 Nginx 使用 Caddy 作为博客静态服务器
- 脚本介绍: Caddy-最容易上手的Web Server
本博客基于Caddy中文文档,结合其他文章进行介绍,上接本博客博文把hexo博客部署到VPS服务器,请注意,这次我们需要一个域名。
介绍
为什么要用 Caddy 替换掉 Nginx ?最主要的原因是 Caddy 能让网站自动支持 HTTPS。同样是使用 Let’s Encrypt,换成 Nginx 我们就必须手工操作,并且还需要设置三个月更新证书的计划任务。Caddy默认支持 http/2,很多东西都不需要我们配置了。另外它的配置文件也比 Nginx 的要简单很多,几十行的 Nginx 配置文件 Caddy 仅需要几行就可以搞定了。关于能否将Caddy用作正式的生产环境,目前来看还是有待商榷的,但是Caddy用为简单的Http服务器是没有问题的。
先决条件
- 一个搭载CentOS 7 x64的VPS服务器
- 一个域名
example.com
已被配置为指向VPS IP
,具体方法参见把hexo博客部署到VPS服务器 域名部分 - 已经利用git把hexo博客部署到VPS的
/var/www/blog
文件夹 - 如果已经运行nginx的,需要
nging -s stop
关闭
安装
我们使用Caddy官方的一键安装脚本
大部分caddy的第三方一键脚本对于centOS都仅支持
6.8
或7.2
版本(查看Linux版本方法cat /etc/centos-release
)
在Linux,Mac或BSD操作系统上,使用以下命令安装Caddy最新稳定的系统特定版本:
1 |
|
Caddy二进制文件将被安装到该/usr/local/bin
目录。使用以下命令确认:
1 |
|
为了安全起见,切勿以root身份运行Caddy二进制文件。为了让Caddy能够以非root用户的身份绑定到特权端口(例如80,443),需要setcap
。按如下所示运行该命令:
1 |
|
测试
默认情况下,Caddy使用当前目录(执行命令的目录,而不是caddy二进制文件所在目录)作为网站根目录,因此运行本地站点非常方便。
使用终端或者命令行,切换到站点目录所在:
1 |
|
浏览器打开http://localhost:2015/,如果出现404页面,说明caddy运行正常。使用`Ctrl+C`退出,caddy将尽可能优雅中断。
配置
方案1:来自Caddy官方文档的快速开始
如果服务器设置了防火墙,则打开80和443端口
1
2
3sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload请确保你的域名能解析到你的服务器,具体方法参见把hexo博客部署到VPS服务器 最后一部分
1 |
|
当第一次使用一个真正的域名(不是localhost)运行Caddy时,会出现提示要求输入你的email地址。这是因为Caddy需要验证你的域名,并将验证信息安全地存储在硬盘上。
Caddy必须将40和443端口绑定到一个真正的站点,这需要root或者Administrator的权限
现在我们的网站已经按照在运行了!
<全文完>
<其实并不,Caddy可以很简单的开始,但总有高阶玩家可以把简单的事情变得更复杂,当然,也更安全>
方案2:从Caddyfile开始
创建一个专门的系统用户:caddy
和一组同名的Caddy:
1 |
|
注意:此处创建**的用户caddy只能用于管理Caddy服务,不能用于登录。
/var/www
为Caddy Web服务器创建主目录,并/var/www/blog
为您的站点创建主目录:
1 |
|
创建一个目录来存储SSL证书:
1 |
|
创建专用目录来存储Caddy配置文件Caddyfile
:
1 |
|
创建名为的Caddy配置文件Caddyfile
以下仅是一个普通配置,详细的配置参见本文Caddyfile部分
1 |
|
使用caddy -conf /etc/caddy/Caddyfile
按照配置文件运行caddy。第一次运行会验证邮箱,并进行ssh申请等,等待后将网页浏览器指向http://example.com
或https://example.com
。可看到网站运行的样子
关于Caddyfile的书写解释,可见本文Caddyfile部分
方案3:使用caddy.service(此部分有缺陷,未解决)
github: systemd Service Unit for Caddy
这部分目前我遇到的问题
- 使用
systemctl status caddy.service
提示用户错误。错误的原因一个是systemd version太低,虽然caddy.service要求是219即可,实际上大概是需要229以上才行;- 文件夹权限的问题,涉及到用户和用户组,不太熟,如果把自己搞得ssh拒绝登录就傻了;
等有时间的时候再回头修这个吧😑
为了方便Caddy的操作,我们可以使用systemd为Caddy 设置一个单元文件,然后用它
systemd`来管理Caddy。
1 |
|
启动Caddy服务并使其在系统引导时自动启动:
1 |
|
最后,将网页浏览器指向http://example.com
或https://example.com
。可看到网站运行的样子。
Caddyfile
**Caddyfile**用来告诉Caddy如何提供服务的文本文件。他通常和网站放在一起。1 |
|
Caddy的一般结构如下:
1 |
|
说明:
1 |
|
是将 www 跳转到非 www 的域名。
1 |
|
tls后面改为你的邮箱地址,会自动配置 https。
1 |
|
是一条 https 的优化配置,加上之后,在SSLLabs上测试评分可以拿到A+,想想之前使用 Nginx 的时候,网络上找了各种配置参考都只优化到了 A,所以 Caddy 的自动 Https 功能确实还是很方便的。
1 |
|
是自定义错误页面配置。确保你网站的根目录有相应的文件,不然启动服务会报错。
1 |
|
expires 是控制页面的缓存,上面的配置是将 css,js,png,jpg 这样的静态资源缓存1个月。此配置依赖http.expires这个插件,如果你没有安装,配置后启动 caddy 会出错。
1 |
|
ipfilter是根据配置过滤到一些非正常的 IP,可以查看访问log,经常会有一些爬虫频繁的访问网站,没有任何用处反而加大服务器的负载,对于这样的 IP 可以直接过滤掉。blockpage是配置这些 IP 访问网址时显示的页面,依赖http.ipfilter插件。
1 |
|
与上面的ipfilter功能类似,都是过滤掉一些非正常的访问用户,不同的是ipfilter是屏蔽 IP,这段配置则是根据User-agent
block掉一些爬虫。