Caddy

Author Avatar
Junyangz 5月 18, 2018

Caddy Server

上手 Caddy server 有一段时间了,一直打算写点相关使用的体验奈何太懒加之前段时间太忙了。最近刚好结了一些课,时间稍微空余了些便将以前零星的内容整理下。
本文主要涉及Caddy一些初级使用情形(server、反向代理、filemanager等),其他高级的使用场景待以后体验后再补充。

官方简单的介绍:Caddy is the HTTP/2 web server with automatic HTTPS.
Caddy是一个由Go编写的超级轻量级的web服务器。它是一个完全独立二进制文件,并且可以运行在众多平台上,包括Docker。

这些天的使用下来确实也体现了 超级轻量 的体验,配置上手非常方便。另外自带HTTPS很不错,免了手动申请证书的麻烦。下面具体介绍一使用场景。

使用Caddy搭建Google镜像

前端时间看见子川学长写了篇关于使用Caddy搭建Google反代及Wikipedia反代的文章,自己也试了下,发现配置确实方便。
那么如何在 Caddy 上配置 Google 反向代理呢?

安装Caddy

首先在Caddy官网下载并安装Caddy server。关于插件的选择,因为我们这里需要用到 http.filter 作为过滤器将HTTP文本中的链接替换为我们自己的域名,所以这个插件是必选的,另外我们接下来还要用 http.filemanager 搭建文件管理器,所以这两个都勾选上。

curl https://getcaddy.com | bash -s personal http.filemanager,http.filter

配置启动

Caddy 的配置非常简单,我就在这里贴一下我用来代理Google的配置:

  1. 在/etc/caddy/conf.d/新建一个example.com.conf
     google.example.com {
         gzip
         proxy / https://www.google.com {
             header_upstream X-Real-IP {remote}
             header_upstream User-Agent {>User-Agent}
             header_upstream Accept-Language en-US #设置Google搜索默认语言
             header_upstream Accept-Encoding identity #禁用upstream的Gzip
         }
         filter rule {
             content_type text/.*
             search_pattern www.google.com
             replacement google.example.com
         }
         filter rule {
             content_type text/.*
             search_pattern (www|ssl).gstatic.com
             replacement gstatic.example.com
         }
     }
     gstatic.example.com { #Google.com引用gstatic.com的资源也需反代
         gzip
         proxy / https://www.gstatic.com {
             header_upstream X-Real-IP {remote}
             header_upstream User-Agent {>User-Agent}
         }
     }
    
  2. DNS配置:
    1. google.example.com A/AAAA {Caddy server IP}
    2. gstatic.example.com A/AAAA {Caddy server IP}
  3. 启动Caddy
     /usr/local/bin/caddy -agree=true -conf=/etc/caddy/caddy.conf
     # 没问题就可以用systemctl启动
     systemctl start caddy@service.service
    

使用Caddy搭建文件管理器

配置filemanager

前面安装Caddy的时候注意勾选filemanager这个插件,剩下就简单贴一下配置文件吧。

file.example.com {
    filemanager / /data/share {
        database /path/filemanager.db
        recaptcha_key       {recaptcha_key}
        recaptcha_secret    {recaptcha_secret}
        alternative_recaptcha true #启用国内可用的g-recaptcha
        locale  en
        }
    }

启动Caddy

参考上一部分启动即可。

Caddy反代一个简单的实践

www.example.com {
    gzip
    proxy / https://example.com/ {
        transparent
                header_upstream Host {proxy_host}
                header_upstream X-Real-IP {remote}
                header_upstream X-Forwarded-For {remote}
                header_upstream X-Forwarded-Proto {scheme}
                header_downstream -Access-Control-Allow-Origin
}

代理了一个Flarum站点还有些问题没解决。

Reference