lzx1413's blog

Caddy使用教程【1】

Caddy是一个轻量级的服务器容器,使用golang编写,使用十分方便,支持以下特性:

  • HTTP/2
  • Automatic HTTPS
  • Easy Deployment
  • Multi-core
  • Markdown
  • WebSockets
  • IPv6
  • Logging
  • FastCGI
  • Headers
  • Reverse Proxy
  • Rewrites & Redirects
  • Clean URLs
  • Gzip
  • Directory Browsing
  • Virtual Hosts

Caddy使用时仅运行一个可执行文件,并通过Caddyfile文件进行配置,下面将对其各个功能进行介绍。

The Caddyfile

Caddyfile是Caddy运行时的配置文件,若与caddy在同一目录下可以默认查找到,如果不在同一个目录下,可通过指令
caddy -conf="/path/to/Caddyfile"进行配置

basicauth

basicauth实现了http的基本权限认证功能,这个功能可以使用账号和密码来保护文件或文件夹。需要注意的是这种方法在纯html中是不安全的,所以在使用时要慎重。
在Caddyfile中的指令是:

1
basicauth path username password

  • path 需要保护的文件名或者文件夹的名字
  • username 用户名
  • password 密码
    需要保护特定多文件或文件夹时使用如下指令:
1
2
3
basicauth username password{
trueresources
}
  • resources 每行一个文件或者文件夹

browse

browse支持对特定文件路径下的文件进行文件浏览,指令如下:

1
browse [path [tplfile]]

  • path 浏览的根路径
  • tplfile 使用的模板文件,用于显示文件树
    支持获取json格式的返回,示例如下:
1
curl -H "Accept: application/json" 'localhost:2015/?limit=1'

errors

errors 允许自定义错误界面和制定log文件地址

Examples

1
errors ../error.log
1
2
3
4
5
errors {
truelog ../error.log
true404 404.html # Not Found
true500 500.html # Internal Server Error
}
1
2
3
4
5
6
7
errors {
truelog error.log {
truetruesize 50 # Rotate after 50 MB
truetrueage 30 # Keep rotated files for 30 days
truetruekeep 5 # Keep at most 5 log files
true}
}

internal

internal 可以隔离特定文件夹,避免被外部访问到,访问的请求将会收到一个404 的返回。
但是允许特定的设置的代理访问这些资源,这种模式可以允许一个反向代理进行登陆,授权等操作。
指令

1
internal path

  • path 是保护资源的根目录

Examples

1
2
internal /internal
proxy /redirect http://localhost:9000

ipfilter

用于通过客户ip来禁止或者允许访问。此功能基于国家代号,所以需要一份 MaxMind’s GeoLite2 Country database 的拷贝。
指令

1
2
3
4
5
6
7
8
ipfilter paths... {
truerule block | allow
trueip list or/and range of IPs...
truecountry countries ISO codes...
truedatabase db_path
trueblockpage block_page
truestrict
}

  • paths… 是一系列空的根文件夹,需要进行ip判断,用空格隔开
  • rule 白名单 黑名单模式
  • ip… ip或者ip范围
  • country… 国家IOS码 空格隔开
  • db_path 地理ip数据库,只有当county使用时才需要
  • block_page 被禁止ip访问返回页面
  • strict 。。。一般不用

Examples

1
2
3
4
ipfilter / {
truerule allow
trueip 93.168.247.245
}

只支持一个ip地址的访问

1
2
3
4
5
ipfilter / {
truerule block
trueip 212.10.15.0-255 213.10.15.0-10 5.23.4.24
trueblockpage /local/data/default.html
}

限制两个ip段的地址的访问和一个特定地址的访问,并且显示default.html

1
2
3
4
5
6
ipfilter / {
truerule allow
truecountry FR
truedatabase /local/data/GeoLite2-Country.mmdb
trueip 99.23.4.24 201.22.3.12
}

仅允许两个来自法国的ip进行访问