CasWAF
运维

节点

任意多台机器都可以用相同的数据库设置运行CasWAF。每一台都是完整的网关:服务所有站点,使用所有证书,检查所有规则,所以你可以把DNS指向所有机器,把它们放在负载均衡后面,或者每个地区用一台。管理界面可以在其中任何一台上运行。

哪些共享,哪些不共享

通过数据库共享每个网关自己保存
站点、证书、规则、节点、设置限流计数
请求记录,来自所有网关已通过的验证码
健康告警检查,所以每个节点各自告警

每个网关每隔几秒从数据库重新加载站点和规则,所以在管理界面里做的修改不用重启就能到达每个节点。

Let's Encrypt证书对每个站点只由一个网关申请,即站点Tag里写的那个;证书进入数据库后,其他网关就使用它。

节点列表

Nodes页面上每台网关机器一个条目。不管有没有条目,网关都会处理流量;条目只保存这台机器的设置。

字段含义
Name机器的主机名,必须完全一致
Upgrade mode这台机器什么时候可以更新:At Any Time、Half A Hour(只在UTC+8的23:00到23:30之间)或No Upgrade
Self update让这台机器上的CasWAF从Git自动更新;见升级
Run modeGo Run或Binary,用于部署Casbin自己的应用
Tag、Display name、Client IP给你自己看的备注

以admin账号登录时再创建节点条目:CasWAF按admin/<hostname>查找自己的条目。

随机器启动

在Windows上,以及在Linux上CasWAF作为systemd服务运行时,CasWAF会确保机器重启后自己再次启动,所用的名字是dbName:

  • Windows:它写入Desktop\run\<dbName>.bat,这个文件在<appDir>\<dbName>里运行go run main.go,并在“启动”文件夹里放一个指向它的快捷方式。
  • Linux:它期望以caswaf-site-<dbName>.service这个unit运行;如果unit文件不存在,就写入并启用它,在<appDir>/<dbName>里运行go run main.go。

所以要把仓库放在<appDir>/<dbName>。在Linux上,如果appDir = /opt、仓库在/opt/caswaf,可以自己写unit来运行构建好的程序,CasWAF就不会去动它:

# /etc/systemd/system/caswaf-site-caswaf.service
[Unit]
Description=CasWAF
After=network-online.target
Wants=network-online.target

[Service]
WorkingDirectory=/opt/caswaf
ExecStart=/opt/caswaf/caswaf
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now caswaf-site-caswaf

主机名里恰好有两个-的机器不做这些,也不做自动更新。

一台机器上运行多个CasWAF

CasWAF启动时会停掉监听它端口的任何进程(httpport,开启网关时还有gatewayHttpPort和gatewayHttpsPort)。一台机器上的两个实例要在各自的conf/app.conf里用不同的端口,而且只有一个能在80和443上运行网关。

CasWAF崩溃后也会自己重启,五分钟内最多五次。

在GitHub上编辑

本页内容