caddy的访问认证及频次限制
来源:互联网 发布:海贼王索隆的刀淘宝 编辑:程序博客网 时间:2024/05/17 08:02
Caddy 是一个多功能的 HTTP web服务器,并且使用Let’s Encrypt提供的免费证书,想要自动让网站升级到HTTPS,需要满足一下几个条件:
1. 主机不能为空,不能为localhost,不能是通配符,不能是一个IP地址
2. 端口不能为指定为80
3. 模式不能指定为http
4. 网站定义的TLS不能关闭
5. 不能由你来提供证书和密钥
6. caddy可以绑定到80和443(除非你用DNS挑战)
一、访问认证
1. basicauth
caddy的basicauth 实现了HTTP Basic Authentication。Basic Authentication可以通过使用用户名和密码的方式来保护文件和目录。
注意:基本的认证在http上是不安全的。在决定使用HTTP基本身份验证时要谨慎。
使用语法如下:
保护单个文件或目录:
basicauth path username password
例子:
basicauth /secret Bob hiccup
- path:受保护的文件或目录
- username:访问所需的用户名
- password:访问所需的密码
保护多个文件或目录
basicauth username password {
realm name
resources
}
例子:
basicauth “Mary Lou” milkshakes {
realm “Mary Lou’s documents”
/notes-for-mary-lou.txt
/marylou-files
/another-file.txt
}
- username:访问所需的用户名
- password:访问所需的密码
- realm:可选配置,用于标识受保护的区域,不可重复
- resources:文件或目录的列表,每行一个
2. JWT
JWT为caddy实现了一个基于JSON Web Tokens的认证层。
jwt 指令是 Caddy 的扩展功能,我们需要在官网上选择添加该功能并且获取编译后的版本。
其基本语法为:
jwt [path]
高级语法:
jwt {
path [path]
redirect [location] # 当请求被拒绝时,重定向到该位置
allow [claim] [value]
deny [claim] [value]
}
譬如我们预设了两个令牌:user: someone 与 role: member ,我们的配置项如下:
jwt {
path /protected
deny role member
allow user someone
}
该中间件会拒绝所有 role: member 的访问,除了用户名为 someone 的用户。而另一个 role: admin 或者 role: foo 的用户则可以正常访问。
我们可以通过三种方式来提交令牌:
- 通过header
Authorization: Bearer - 通过Cookie
“jwt_token”: - 通过URL的请求参数
/protected?token=
二、频次限制
ratelimit
根据客户端的ip地址来限制请求的处理速率
超出的请求会返回429错误(过多的请求),并且header中会添加X-RateLimit-RetryAfter
ratelimit并非caddy的默认特征,因此下载caddy时需要选择http.ratelimit插件
可以设置每秒、每分钟、每小时可以访问多少次
可以添加白名单
可以对某一IP范围不加限制
可以对某些文件或某些目录不加限制
针对单个资源
ratelimit path rate burst unit
例子:
ratelimit /r 2 3 second
说明:对于/r目录下的文件,限制客户端每秒发送2个请求(3个爆发)
针对多个资源
ratelimit rate burst unit {
whitelist CIDR
resources
}
例子:
ratelimit 2 2 minute {
whitelist 1.2.3.4/32
whitelist 192.168.1.0/30
/foo.html
/dir
^/dir/app.js
}
说明:
whitelist 白名单IP列表
对/foo.html和/dir有ratelimit限制
对/dir/app.js没有限制
三、IP限制
ipfilter
根据客户端的IP来判断允许还是拒绝。
根据IP或CIDR范围来过滤
ipfilter / {
rule block
ip 70.1.128.0/19 2001:db8::/122 9.12.20.16
}
根据国家ISO码过滤
ipfilter / {
rule allow
database /data/GeoLite.mmdb
country US JP
}
定义一个阻塞页(即访问被拒绝时返回的页面)
ipfilter / {
rule allow
blockpage default.html
ip 55.3.4.20 2e80::20:f8ff:fe31:77cf
}
过滤多个路径
ipfilter /notglobal /secret {
rule allow
ip 84.235.124.4
}
配置多个阻碍
ipfilter / {
rule allow
ip 32.55.3.10
}
ipfilter /webhook {
rule allow
ip 192.168.1.0/24
}
- caddy的访问认证及频次限制
- nginx限制客户端的访问频次和访问次数
- redis实现访问频次限制的几种方式
- redis实现访问频次限制的几种方式
- 0140 redis实现访问频次限制的几种方式
- nginx怎么限制客户端访问频次与访问次数
- Caddy
- caddy
- nginx限制ip访问,进行认证
- 细分方法研究网站用户行为(一):基于访问频次的用户行为研究
- OAuth的原理认证流程及访问资源流程
- OAuth的原理认证流程及访问资源流程
- nginx的IP访问控制及用户认证
- caddy 作为微服务的 API gateway
- PHP IP及IP段进行访问限制的代码
- 统计URL出现的频次
- 访问限制的问题
- IP的限制访问
- 算法系列简单研究(原)
- sql 语句的执行顺序
- 优先队列的详解
- spring源码导入eclipse
- 操作系统-内存管理-基本分段内存管理方式
- caddy的访问认证及频次限制
- redis介绍及使用方法简介
- 后缀数组模板
- Java学习第三天
- 安装git出现templates not found的问题
- 排序
- 基于Vue全家桶制作的的高仿美团APP
- HBuilder 打包.apk
- python 循环