Caddy的内容集合

Caddy 入门

HTTP域名

80端口号,和后面的 { 必须有空格

1
2
3
4
5
domain1.com:80 domain2.com:80 {
root /home/wwwroot # 网站目录
index index.php # 默认首页
#这里是配置
}

HTTPS 域名

1
2
3
4
5
6
7
domain.com:443 {
root /var/www/notadd/public
index index.php
tls you@163.com # 自动申请证书,必须在外网,且域名可访问
# 如果你有证书,可如下方式配置
# tls /home/ssl/domain.com.crt /home/ssl/domain.com.key
}

配置PHP转发 (Laravel为例)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Laravel.com:80 {
root /var/www/notadd/public
fastcgi / php-fpm:9000 php {
index index.php
}
# To handle .html extensions with laravel change ext to
# ext / .html
rewrite {
r .*
ext /
to /index.php?{query}
}
gzip # 开启gzip
browse # 开启文件浏览
#日志
log /var/log/caddy/access.log
errors /var/log/caddy/error.log
}

markdown 渲染

1
2
3
4
5
6
7
8
caddy 可以直接帮你把md 文件渲染成网页
domian.com:80 {
markdown {
ext /data # 不进行渲染的目录
template [name] path # 模板,可不填,使用默认
}
}

自动从git 同步

1
2
3
4
5
6
7
8
9
domian.com:80 {
root /home
git https://github.com/notadd/notadd.git /var/www/ {
key /home/git/domian.key # key 文件地址,公有库可忽略
interval 60 # 间隔60秒
# 或者使用钩子同步
hook /hook password # hook地址和密钥,用于 github 等git 仓库推送更新。
}
}

创建文件下载服务器

需要说明的是,这个自带界面哦,还能在线编辑文件
初始用户名密码均为admin

1
2
3
4
domian.com:80 {
root /home
filemanager
}

自己用的例子

1
2
3
4
5
6
7
8
9
10
:80 {
root /home/wwwroot
timeouts none
# tls /root/xxx.crt /root/xxx.key
gzip
#basicauth / user userpwd
filemanager /file /home/wwwroot { #前面是浏览器访问地址,后面是访问开放本机地址
#no_auth
}
}

当然还有更多好玩的用法,参考官方文档: Caddy User Guide:http://link.zhihu.com/?target=https%3A//caddyserver.com/docs

Caddy配置文件几例

Caddy的特点之一就是,配置文件非常的简单,继续下面看就知道了。
参考文档:https://caddyserver.com/docs
目录加密,这里给/加密了。

1
2
3
4
5
6
7
:80 {
root /usr/local/caddy/www/file
timeouts none
# tls /root/xxx.crt /root/xxx.key
gzip
basicauth / user userpwd
}

注意,XXX.crtcert.pemxxx.keyprivkey.pem

多个网站

1
2
3
4
5
6
7
8
mysite.com {
root /www/mysite.com
}
sub.mysite.com {
root /www/sub.mysite.com
gzip
log ../access.log
}

服务器IP 反向代理
下面是一个,用你服务器的IP 来反向代理一个 http 协议的网站 http://www.baidu.com

1
2
3
4
:80 {
gzip
proxy / http://www.baidu.com
}

放到/usr/local/caddy/Caddyfile
域名 反向代理 HTTP
下面是一个,用你的域名 来反向代理一个 http 协议的网站 http://www.baidu.com
以下所有示例域名为 toyoo.ml ,请注意替换为 自己的域名 !

1
2
3
4
http://toyoo.ml {
gzip
proxy / http://www.baidu.com
}

如果你需要反向代理 HTTPS 协议的网站,比如 https://www.baidu.com ,那么继续看下面步骤。
域名 反向代理 HTTPS
如果你有 SSL证书和密匙的话,把 SSL证书(xxx.crt)和密匙(xxx.key)文件放到 /root 文件夹下(也可以是其他文件夹,自己改下面代码),然后这样做:

1
2
3
4
5
https://toyoo.ml {
gzip
tls /root/xxx.crt /root/xxx.key
proxy / https://www.baidu.com
}

如果你没有 SSL证书和密匙,那么你可以这样做:
下面的 xxxx@xxx.xx 改成你的邮箱,同时需要注意的是,申请 SSL证书前,请务必提前解析好域名记录(解析后最好等一会,以全球生效),否则 Caddy会申请并配置失败!

1
2
3
4
5
https://toyoo.ml {
gzip
tls xxxx@xxx.xx
proxy / https://www.baidu.com
}

如果一切正常,那么Caddy会自动帮你申请 SSL证书并配置好,而且会定时续约SSL证书 和 强制 http重定向至https !
需要注意的是,因为Q会检测关键词,所以请务必使用 HTTPS协议,不要使用 HTTP协议,否则很快就会被墙!
HTTP重定向为HTTPS
当你是手动指定 SSL证书和密匙 来配置的话,Caddy只会监听 443端口(https),并不会自动设置 80端口(http)的重定向(如果是Caddy自动申请的SSL证书,那么就自动做好了),如果要做重定向的话,可以这样做:
下面的示例代码中,是把 http://toyoo.ml、http://233.toyoo.ml、https://666.toyoo.ml 三个域名都重定向到了 https://toyoo.ml

1
2
3
4
5
6
7
8
echo "http://toyoo.ml ,http://233.toyoo.ml ,https://666.toyoo.ml {
redir https://toyoo.ml{url}
}
https://toyoo.ml {
gzip
tls /root/xxx.crt /root/xxx.key
proxy / https://www.baidu.com
}

修改完 Caddy的配置文件后,重启 Caddy即可。

1
service caddy restart

git拉取功能(3600秒为间隔时间)
git https://github.com/user/project.git /var/www/html/git/ {
interval 3600
}

访问口令认证(用户emiria,密码abc123)

1
basicauth / emiria abc123

cors跨域(下载时记得勾上)

1
2
3
4
5
6
7
8
9
cors / {
origin https://alleysakura.com
origin http://alleysakura.pw https://alleysakura.pw
methods POST,PUT
allow_credentials false
max_age 3600
allowed_headers X-Custom-Header,X-Foobar
exposed_headers X-Something-Special,SomethingElse
}

IP屏蔽(下载时记得勾上)

1
2
3
4
5
ipfilter / {
rule block
ip 212.10.15.0-255 202.10.15.0-10 59.43.247.103
blockpage /var/www/html/403.html
}

跳转功能(目录重写功能也类似)

1
redir http://example.com{url}

而且不像nginx进行www重定向那么麻烦,把域名原域名(不限协议)写上,大括号里加上这个就可以,简直太赞了

自定义错误页面

1
2
3
4
errors {
404 404.html
500 /var/www/html/500.html
}

传统php+mysql建站
包管理器安装mysql+php,然后添加

1
fastcgi / 127.0.0.1:9000 php

caddy特色markdown建站
首先载入markdown渲染格式(用index.html来定义,类似swig和ejs模板)

1
2
3
markdown / {
template index /path/templates/index.html
}

这是一种渲染格式(index.html)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>{{.Doc.title}}</title>
<link rel="stylesheet" type="text/css" href="styles/main.css" />
</head>
<body>
<header>
<a href="/"><h1 class="page-title">{{.Doc.sitename}}</h1></a>
</header>
<main>
{{range .Links}}
{{if ne .URL "/index.md" }}
<article>
<h3><a href="{{.URL}}">{{.Title}}</a></h3>
{{.Summary}}
</article>
{{end}}
{{end}}
</main>
</body>
</html>

接下来,我们只用按照正常的markdown在网站根目录写了(index.md)

1
2
3
4
5
template: index
title: caddy
sitename: test caddy
text 233333333333333333

当然各种html标签也是可以滴,爱怎们玩怎么玩2333333

反向代理引入更多后端系统
引入反向代理,只需一行

1
proxy / localhost:4000

负载均衡也是类似配置的23333

1
2
3
proxy / 10.10.201.222:80 10.10.201.221:80 {
policy round_robin
}