caddy 配置案例:
caddy从当前目录的Caddyfile(默认)文件中读取配置,当然你也可以通过-conf指定配置文件路径。Caddyfile的配置格式 的确非常easy,这也符合caddy的目标。
Caddyfile总是以站点的Addr开始的。
单一静态站点
Caddyfile样例如下:
test.ptmind.com:80{ #监听80端口,写443 端口,会要求输入邮箱地址,自动生成ssl 加密证书gzip #开启gzip log /var/log/caddy/test.ptmind.com.log #访问日志输出位置errors /var/log/caddy/test.ptmind.com.log #错误日志输出位置root /etc/caddy/web-test #站点家目录index index.html index.htm #index 文件在在顺序}
提示
监听80端口,主要访问80就相应;
:80
将其锁定到虚拟主机监听域名;
example.com:80
禁用站点 TLS ,即自动配置ssl加密功能。
tls off
如果你知道website root目录(如果没有指定root,则caddy执行的当前路径会作为website的root路径)下的文件名,比如test.txt,你可以在浏览器 中输入:domain/test.txt,caddy会执行正确的服务,浏览器也会显示test.txt的全文。
单一静态站点,自动生成ssl证书
test.ptmind.com:443{ #写443 端口,会要求输入邮箱地址,自动生成ssl 加密证书gzip log /var/log/caddy/test.ptmind.com.log root /etc/caddy/web-test index index.html index.htm }
生成的证书存放位:
启动caddy 系统用户家目录下面:
我使用root用户启动的
[root@hkjump caddy]# ls -all /root/.caddy/total 16drwx------ 4 root root 4096 Apr 26 20:49 . dr-xr-x---. 5 root root 4096 Apr 28 17:02 .. drwx------ 3 root root 4096 Apr 26 20:49 acme drwx------ 2 root root 4096 Apr 26 20:49 ocsp
Caddy virtualhost支持配置,一个端口支持监听多个域名:
https://t1.ptmind.com{ gzip log /var/log/caddy/t1.ptmind.com.log root /etc/caddy/web-test1 index index.html index.htm }
https://t2.ptmind.com{ gzip log /var/log/caddy/t2.ptmind.com.log root /etc/caddy/web-test2 index index.html index.htm }
目录文件列表浏览
https://caddy.ptbox.cn { root /tmp/ #浏览家目录 browse #开启目录浏览 }
fastcgi代理
caddy 可以将请求通过fastcgi接口发送给后端的实现fastcgi的server。
安装启动服务
/etc/init.d/php-fpm start
查看服务状态
[root@hkjump php-fpm.d]# /etc/init.d/php-fpm status
php-fpm (pid 16137) is running...
验证服务端口
[root@hkjump php-fpm.d]# lsof -n -i:9000COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME php-fpm 16137 root 7u IPv4 95128 0t0 TCP 127.0.0.1:cslistener (LISTEN) php-fpm 16138 www 0u IPv4 95128 0t0 TCP 127.0.0.1:cslistener (LISTEN) php-fpm 16139 www 0u IPv4 95128 0t0 TCP 127.0.0.1:cslistener (LISTEN) php-fpm 16140 www 0u IPv4 95128 0t0 TCP 127.0.0.1:cslistener (LISTEN) php-fpm 16141 www 0u IPv4 95128 0t0 TCP 127.0.0.1:cslistener (LISTEN) php-fpm 16142 www 0u IPv4 95128 0t0 TCP 127.0.0.1:cslistener (LISTEN)
caddy 配置如下:
https://caddy.ptbox.cn { gzip fastcgi / 127.0.0.1:9000 php log /var/log/caddy/caddy.ptbox.cn.log root /etc/caddy/php }
创建index.php 文件:
[root@hkjump caddy]# more /etc/caddy/php/index.php
验证,浏览器访问 caddy.ptbox.cn,即可看到 php 相关配置信息;
加载配置文件 import
导入单个配置文件:
import config/common.conf
加载文件夹 vhosts folder:
import ../vhosts/*
配置实例
[root@hkjump caddy]# more Caddyfile https://cgi.ptbox.cn { gzip fastcgi / 127.0.0.1:9000 php log /var/log/caddy/caddy.ptbox.cn.log root /etc/caddy/php/ } import ./vhosts/* #加载vhosts文件夹下的所有配置文件
[root@hkjump caddy]# cat ./vhosts/test.conf https://test.ptbox.cn { gzip log /var/log/caddy/test.ptbox.cn.log root /etc/caddy/web-test index index.html index.htm }
启动caddy ,可以看到,服务将自动加载配置,并监听多个域名:
[root@hkjump caddy]# caddy Activating privacy features... done. https://cgi.ptbox.canhttps://test.ptbox.cnhttp://cgi.ptbox.cnhttp://test.ptbox.cn
跳转功能: redir
域名跳转
test.ptbox.cn 直接跳转到 www.ptmind.com 域名
test.ptbox.cn:443 { tls [email protected] redir https://www.ptmind.com{uri}}
文件跳转
redir /resources/p_w_picpaths/photo.jpg /resources/p_w_picpaths/drawing.jpg 307
多目录跳转
redir 307 { /foo /info/foo /todo /notes /api-dev /api meta}
根据协议跳转:
所有http 请求跳转到一个域名
redir 301 { if {>X-Forwarded-Proto} is http / https://{host}{uri} }
http.git 结合git push自动部署站点或者代码
配置选项含义
git [repo path] { repo :支持SSH和HTTPS URL。 path :存储clone代码存储目标路径; 默认是站点 根目录。它可以是绝对的或相对的; branch :git代码分支或标签; 默认是master分支。 key :SSH私钥的路径 interval :拉取代码之间的时间间隔; 默认为3600(1小时),最小为5.间隔-1禁用周期性拉。 clone_args :额外的cli args传递给git cloneeg --depth=1。git clone当第一次获取源时调用。 pull_args :额外的cli args传递给git pulleg -s recursive -X theirs。git pull当源被更新时使用。 hook :hook路径和密码用于创建一个webhook,目前仅支持 GitHub和Travis 支持秘密。 hook_type :Webhook类型是自动检测的,GitHub, Gitlab, BitBucket, Travis and Gogs。 then command [args...] :clone成功后执行的命令; then_long command [args...] :用于长时间执行的命令,应该在后台运行。 }
定时git clone 自动拉取代码
https://caddy.ptbox.cn { gzip log /var/log/caddy/caddy.ptbox.cn.log root /etc/caddy/web-test index index.html git [email protected]:kevin/web-test.git /etc/caddy/web-test { branch v2 #git代码分支或标签; interval 6000 #拉取代码之间的时间间隔; key /root/.ssh/id_rsa }}
设置web hook ,根据git commit 状态自动拉取更新代码
注意:在gitlab 项目上配置web-hook 地址为:https://caddy.ptbox.cn/webhook
https://caddy.ptbox.cn { gzip log /var/log/caddy/caddy.ptbox.cn.log root /etc/caddy/web-test index index.html git [email protected]:kevin/web-test.git /etc/caddy/web-test { branch v2 hook /webhook #设置hook地址, hook_type gitlab #hook 类型 key /root/.ssh/id_rsa then chmod 755 /var/log/caddy/caddy.ptbox.cn.log }}
当git 更新后,会通知caddy 服务,caddy 日志会提示一下信息:
2017/05/02 15:50:02 Received pull notification for the tracking branch, updating... From gitlab.ptmind.com:kevin/web-test * branch v2 -> FETCH_HEAD
负载均衡
Caddy支持负载均衡配置,并支持三种负载均衡算法:random(随机)、least_conn(最少连接)以及round_robin(轮询调度)。
负载均衡同样是通过proxy middleware实现的。
localhost:2015 { log ./2015.log proxy / localhost:9001 localhost:9003 { policy round_robin } proxy /bar localhost:9002 localhost:9004 { policy least_conn } }
服务配置重新加载
centos6 系列
You could signal Caddy with USR1, which does a zero-downtime reload. Caddy can be easily reloaded as such: From the terminal run the following commands:1.Get the PID from the running caddy instance: ps -C caddy PID TTY TIME CMD1392 pts/0 00:00:00 caddy2.Send kill command with USR1 parameterkill -s USR1 1392
centos7 系类
caddy.service
[Unit]Description=Caddy Web ServerDocumentation=https://caddyserver.com/docsAfter=network.target[Service]User=caddyStartLimitInterval=86400StartLimitBurst=5LimitNOFILE=16535ExecStart=/usr/local/bin/caddy -agree=true -conf=/etc/caddy/Caddyfile -pidfile=/var/run/caddy/caddy.pid -log=stderrPIDFile=/var/run/caddy/caddy.pidRestart=on-failure[Install]WantedBy=multi-user.target
参考文档
https://caddyserver.com/docs
https://github.com/caddyserver/examples
https://github.com/caddyserver/examples/blob/master/systemd/caddy.service