Https 就是这么简单之 Caddy2

  |   16 评论   |   25 浏览

之前博客一直跑的是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语言编写的轻量级的应用
作为一个很好的选择:

  • 网络服务器
  • 反向代理
  • 边车代理
  • 负载均衡器
  • API网关
  • 入口控制器
  • 系统管理员
  • 流程主管
  • 任务调度器
  • (任何长时间运行的过程)

尽管它具有与其他层一起工作的能力,但主要在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.相关参数

[[email protected] ~]# 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的方式来进行配置启动服务了

---------------------------------------------------------------
>> 博客地址:https://blog.mufengs.com
>> 邮箱地址:[email protected]
>> 微信帐号:Do8080
>> Github : https://github.com/mufengcoding
---------------------------------------------------------------

评论

  • mufengcoding 回复»

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

  • CyanTaro 回复»

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

  • mufengcoding 回复»

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

  • mufengcoding 回复»

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

  • liehuo 回复»

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

  • 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
    我觉得如果黑客也这样随便提交一个配置,不就把原来的配置覆盖掉了吗?这样还有安全性吗?我看了两天官网的介绍,也没有说如何保证乱提交配置防护的?

  • mufengcoding 回复»

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

  • lizhongyue248 回复»

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

  • mufengcoding 回复»

    https://caddyserver.com/docs/quick-starts/caddyfile

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

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

    caddy reload
    
  • 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>
    
  • mufengcoding 回复»

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

  • 250740270 回复»

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

  • mufengcoding 回复»

    适合自己的才是最好的

  • mufengcoding 回复»

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

  • hjljy 回复»

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

  • lizhongyue248 回复»

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

发表评论