Https 就是这么简单之 Caddy2

之前博客一直跑的是 Caddy1.0 版本,很轻松。就博客和小应用来说 Caddy 做 Web 服务就够了,可以省去很多事情,逼格高而且不失优雅。
之前写的一些关于 caddy1.0 的使用姿势

基于 caddy 提升 https 安全等级
caddy 实现 google 镜像站点

01. 起因

看同事在用阿里云的赛门铁克 ssl 证书,实在是看不下去了,就给同事安利了 caddy。当时没多想,随手丢了一个百度到使用文档,然后同事自由发挥了下,编译安装了 caddy2,跑不起来,很纠结。当时因为 caddy 只有 1.0 版本,2 版本一直处于 beta 阶段,就没有用,结果翻车了。。。
于是被动的去学习了一波。。

02. Caddy 简介

caddy 的文档还是蛮全的,不过有些细节需要你自己的发掘,摆好姿势和造型才能跑的更流畅。

官方文档:https://caddyserver.com/docs/getting-started
GitHub 文档:https://github.com/caddyserver/caddy/wiki
example:https://github.com/caddyserver/caddy/wiki/v2:-Caddyfile-examples

caddy2 是使用 go 语言编写的轻量级的应用
作为一个很好的选择:

尽管它具有与其他层一起工作的能力,但主要在 OSI 模型的 L4(传输层)和 L7(应用层)上运行。

Caddy2 与 Caddy1 的主要区别就是,caddy 使用 API 的方式,以上传 JSON 文件进行配置站点,同时也兼容之前的 Caddyfile 配置文件。

03. 快速搭建 https 站点

1.下载二进制文件

wget https://github.com/caddyserver/caddy/releases/download/v2.0.0-beta12/caddy2_beta12_linux_amd64 
  1. 拷贝到 bin 下并赋予可执行权限
mv caddy /usr/bin/ && chmod 777 caddy
  1. 运行 caddy 守护进程,在当前终端继续操作的化可以使用 start
caddy run

image.png

4.打开另外一个终端,并查看当前配置。默认情况下配置是空的,因为我之前操作过,所有会有一些配置内容

curl localhost:2019/config/

image.png

5.创建一个配置文件

vim caddy.json
{  
    "apps":{  
        "http":{  
            "servers":{  
                "srv0":{  
                    "listen":[  
                        ":443"  
                    ],  
                    "routes":[  
                        {  
                            "handle":[  
                                {  
                                    "handler":"subroute",  
                                    "routes":[  
                                        {  
                                            "handle":[  
                                                {  
                                                    "handler":"reverse_proxy",   #处理方式为反向代理
                                                    "health_checks":{  
                                                        "active":{  
                                                            "expect_status":2,  
                                                            "path":"/health"            #健康检查的路径
                                                        }  
                                                    },  
                                                    "transport":{  
                                                        "protocol":"http",  
                                                        "read_buffer_size":4096  
                                                    },  
                                                    "upstreams":[  
                                                        {  
                                                            "dial":"127.0.0.1:8080"  
                                                        }  
                                                    ]  
                                                }  
                                            ],  
                                            "match":[  
                                                {  
                                                    "path":[  
                                                        "/"  
                                                    ]  
                                                }  
                                            ]  
                                        }  
                                    ]  
                                }  
                            ],  
                            "match":[  
                                {  
                                    "host":[  
                                        "opschina.top",  
                                        "www.opschina.top"  
                                    ]  
                                }  
                            ]  
                        }  
                    ]  
                }  
            }  
        }  
    }  
}

  1. 上传配置文件
curl localhost:2019/load  -X POST  -H "Content-Type: application/json"  -d @caddy.json

7.稍等片刻便可以发现生成好了
访问我们的网站 www.opschina.top,这时候发现会自动跳转到 https,搞定收工!
image.png

04.相关参数

[root@sun ~]# caddy help
Caddy is an extensible server platform.

usage:
  caddy <command> [<args...>]

commands:
  adapt                            将配置文件转换成json
  environ                          打印环境变量
  file-server                      启动可付诸生产的文件服务器
  hash-password                    用base64加密密码
  help                             显示caddy的命令帮助
  list-modules                     列出已安装的模块
  reload                           热加载
  reverse-proxy                    快速且可适用生产的反向代理
  run             		   启动Caddy进程并无限期阻止
  start           		   后台运行caddy
  stop                             停止caddy
  validate        		   测试配置文件是否正确
  version         		   打印版本号

Use 'caddy help <command>' for more information about a command.

Full documentation is available at:
https://caddyserver.com/docs/command-line

后续有时间,给大家分享下深入使用下 Caddy2.

有个很深的感触,就是很多应用都可以使用 API 的方式来进行配置启动服务了

  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    9 引用 • 38 回帖 • 10 关注
16 回帖
请输入回帖内容...
  • lizhongyue248

    caddy2 功能强大了很多,但是资料/dome 都好少。。。前段时间准备用 caddy2 的,后来还是乖乖先用 caddy1 了

    1 回复
  • hjljy

    nginx 都没有摸清楚的我,默默路过

    1 回复
  • mufengcoding

    有很多 k8s 的 PaaS 平台组件有用 caddy2 的, Caddy2 毕竟还是处于 beta 版本。个人觉的 2.0beta 版本对于新手变麻烦了

  • mufengcoding

    适合自己的才是最好的

  • 250740270

    caddy2 怎样用模板 templates 去搭建一个 Markdown 静态网站?我在 caddy1 中很轻易就搭建成功了,但 v2 版本不太一样搞懵了,官方的案例少之又少。

    1 回复
    1 操作
    250740270 在 2020-02-18 15:03:44 更新了该回帖
  • mufengcoding

    Markdown 的静态网站应该很简单啊,你可以把对于的 nginx 或者 caddy1 的配置发我,我帮你看下

    1 回复
  • 250740270

    caddyfile

    localhost:8080, 127.0.0.1:8080 { 
        root /var/www/myhome
        ext .md
        markdown / {
            template template.html .md
        }
    }
    

    template.html

    <body>
    	<div class="markdown-body"> {{.Doc.body}}</div>
    </body>
    

    以上是 caddy v1 的配置,在 caddy v2 中不知道用什么语法去呈现出来。

    1 回复
  • mufengcoding

    官网说明

    curl localhost:2019/load \
      -X POST \
      -H "Content-Type: text/caddyfile" \
      --data-binary @Caddyfile
    

    直接使用 caddyfile 上传到 caddy2 服务器,他自己会适配的

    caddy reload
    
  • lizhongyue248

    请问下有没有 https 的 cloudflare 的解决方案?因为是由 cloudflare 做 cdn,那么 https 证书申请的 ip 就不统一,无法申请到。Caddy2 找了好多个办法都不行 T T

    1 回复
  • mufengcoding

    caddy 有的,我是 caddy1 不过 caddy1 可以用 caddy2 的配置

  • liehuo

    4 周前
    引用
    官网说明

    curl localhost:2019/load
    -X POST
    -H "Content-Type: text/caddyfile"
    --data-binary @Caddyfile

    curl localhost:2019/load
    -X POST
    -H "Content-Type: text/caddyfile"
    --data-binary @Caddyfile
    我觉得如果黑客也这样随便提交一个配置,不就把原来的配置覆盖掉了吗?这样还有安全性吗?我看了两天官网的介绍,也没有说如何保证乱提交配置防护的?

    1 回复
  • liehuo

    另外我还研究了一下 docker 镜像版的,docker 版的 autos ave. JSON 配置文件路径和普通的配置文件 auto save. 路径不一样,无论放哪里都一样,关键是如何更改这个路径?caddy envrion 只能打印出这个路径,但是没有说怎么配置这个路径,用 JSON 配置吗?如何配置?

    1 回复
  • mufengcoding

    我记不得了服务是不是一定要起了,如果一定要求的话,问题也不大啊,黑客黑进你的系统了,也就不存在 caddy 配置修改了。你把端口限定在本机访问就好啊

  • mufengcoding

    没研究过,尴尬。回头我踩坑之后,给你答复哈哈哈

  • CyanTaro

    请问博主,caddy2 不能配置成 systemd 服务了吗

    1 回复
  • mufengcoding

    没做过,回头我一起踩坑回复。嘿嘿

请输入回帖内容 ...