最近在尝试配置网站的https,师兄推荐了Caddy来替换nginx,作为web server。Caddy采用golang
语言编写,很容易安装,而且能自动帮助用户注册用于https的证书。
关于Caddy的安装和配置,这篇博客做了非常详细的介绍。我会按照我的配置重新复述一下,并且重点强调配置caddy.service
服务时要注意的权限问题。
Caddy 安装
Caddy官网提供了自定义安装组件的方式,用户可以通过定制platform
,plugins
,telemetry
和license
来生成caddy安装文件并下载。这里不建议采用curl -s https://getcaddy.com | bash
脚本方式安装,因为会提示用户没有选择license
。
下载完成后,采用如下方式安装到系统的/usr/local/bin
目录下,
1 2 3 4
| $ mkdir caddy $ cd caddy $ tar -xvf ../caddy_v0.10.12_linux_amd64_custom_personal.tar.gz $ sudo cp caddy /usr/local/bin/
|
Caddyfile
与nginx类似,Caddy也需要采用配置文件的方式读取server的信息,这里默认的配置文件名为Caddyfile
。针对单host和多host,会有细微的区别,下面我分别列出配置文件的写法,
Single host
1 2 3 4 5 6 7 8 9 10 11
| xxx.com gzip log /var/log/caddy/xxx.log root /home/wwwroot/xxx/ fastcgi / 127.0.0.1:2345 php { index index.php index.html } rewrite { to {path} {path}/ /index.php?{query} }
|
Multiple hosts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| xxx.com { gzip log /var/log/caddy/xxx.log root /home/wwwroot/xxx/ fastcgi / 127.0.0.1:2345 php { index index.php index.html } rewrite { to {path} {path}/ /index.php?{query} }} yyy.com { gzip log /var/log/caddy/xxx.log root /home/wwwroot/yyy/ fastcgi / 127.0.0.1:2345 php { index index.php index.html } rewrite { to {path} {path}/ /index.php?{query} }}
|
可以看出,如果要配置多个hosts,在每一个host的名称后用{}
包含配置信息即可,其目的是让Caddy
能区分不同的host.
配置candy.service
通常我们会将web server配置成系统的服务程序,运行在后台,Caddy
也提供了相应的caddy.service
的脚本,其下载和添加方法为,
1
| sudo curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service
|
打开caddy.service
,其存储路径为/etc/systemd/system/
,其中有几个部分需要注意和修改,例如执行该服务的用户及用户组,Caddyfile
配置文件的路径,以及ssl证书的存储路径等。如果没有配置好,caddy服务会无法正常运行。
1 2 3 4 5 6 7 8 9 10
| ; User and group the process will run as. User=root # 原文为 www-data Group=root # 原文为 www-data ; Letsencrypt-issued certificates will be written to this directory. Environment=CADDYPATH=/etc/ssl/caddy ; Always set "-root" to something safe in case it gets forgotten in the Caddyfile. ExecStart=/usr/local/bin/caddy -log stdout -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp ExecReload=/bin/kill -USR1 $MAINPID
|
根据caddy.service
文件的要求,我们需要新建一系列的文件夹,用于存放caddy生成的文件。
1 2 3
| $ sudo mkdir /etc/caddy $ sudo cp <path of the Caddyfile> /etc/caddy/Caddyfile $ sudo mkdir /etc/ssl/caddy
|
完成以上操作以后,即可运行并查看Caddy
的运行状态,运行前要记得关闭nginx服务,否则会提示80端口被占用。
1 2 3
| $ sudo systemd daemon-reload $ sudo systemd enable caddy.service $ sudo systemd status caddy.service
|
测试
最后,打开浏览器,输入https://xxx.com
,便可以查看是否配置成功。
References