快速上手
概述
OpenResty Edge 使用 admin + node 的架构,对外承载服务的是 node,所有的配置管理都在 admin 上完成。
安装管理 node
如果是免费体验的 demo 环境,我们已经部署好了 node,可以直接跳过此步。
按照我们单独交付的安装流程,新安装好的 node 会出现在「网关集群」下方的「候选节点」列表,我们可以选择批准加入某个集群。 一般来说,集群是按照地域来区分的,同一个机房的 node 节点会放到同一个集群。
新建应用
Edge 部署好了之后,我们可以开始创建应用。 比如我们新建一个包含 foo.test.com 应用,用这个域名去访问 node 的所有行为,都可以在这个应用里配置。
新建的应用没有任何配置,所有访问都会得到 404。
比如
# 假设 node 的 IP 是 47.56.103.89
$ curl -x 47.56.103.89:80 http://foo.test.com/
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>openresty</center>
</body>
</html>
体验 hello world
应用内的主要配置都在「页面规则」里,比如我们可以用 Edge 语言快速实现 hello world。
我们在 「此页面开始时的定制 Edge 语言规则」下面的编辑框里输入:
uri("/hello") =>
say("hello world!");
点击保存之后,右上角会出现「你有 1 个未发布变更 待发布」,这是保险起见,应用内的配置变更并不会立即生效,需要我们确认发布之后,才会真实的在 node 上生效。
我们顺着「待发布」链接,进入发布页面,点击发布,很快(可能肉眼看不到变化)我们可以看到同步状态又回到 100%,意味着新的配置已经同步到 node 生效了。
此时我们可以再来请求一次 node,我们将得到 hello world!
的输出:
# 假设 node 的 IP 是 47.56.103.89
$ curl -x 47.56.103.89:80 http://foo.test.com/hello
hello world!
关于 Edge 语言的更多细节,请查看 EdgeLang 用户手册
- 反向代理到源站
反向代理是 Edge 最基本的功能,比如我们可以配置如下规则:
- 点击页面右上方的「新规则」
- 点开「启用条件」
- URI 前缀匹配 字符串
/api/
- 点开「代理」
- 选择代理到上游,因为我们还没有上游配置,所以需要选择「新上游…」,开始新建上游
- 输入上游的名字:
api-server
,主机名:47.91.165.147
,点击保存,一个新的上游就配置好了 - 此时已经自动回到新建规则的界面,点击「创建」
\===>>>
\===>>>
此时一个简单的反向代理规则就创建好了,同样的,发布之后即可生效。
这个规则意味着,以 /api/ 为前缀的请求,将通过 http 协议回源到 47.91.165.147
的 80
端口,我们可以验证一下:
$ curl -x 47.56.103.89:80 http://foo.test.com/api/xx
recevied URI: /api/xx
request from IP: 47.56.103.89
server IP: 47.91.165.147
备注:47.91.165.147
是我们为 demo 创建的一个源站。
启用 cache
默认不会启用 cache,请求会直接转发到源站,然后再把源站的响应返回给请求方。 如果需要 cache,我们可以如下配置:
- 点编辑(上一步创建的规则)
- 点开缓存,默认使用 URI + 查询字符串 当做缓存键,我们可以不做改动,其余也保持默认值
- 点击保存
同样的,发布的即可生效,我们再来测试一下:
# 第一次请求,注意 Cache-Status 为 MISS
$ curl -x 47.56.103.89:80 http://foo.test.com/api/foo -I
HTTP/1.1 200 OK
Server: openresty+
Date: Mon, 05 Aug 2019 10:04:28 GMT
Content-Type: text/plain
Connection: keep-alive
Req-ID: 0000090001ac17f42960e470
Expires: Mon, 05 Aug 2019 11:04:28 GMT
Cache-Control: max-age=3600
Cache-Status: MISS
# 第二次请求,注意 Cache-Status 为 HIT
$ curl -x 47.56.103.89:80 http://foo.test.com/api/foo -I
HTTP/1.1 200 OK
Server: openresty+
Date: Mon, 05 Aug 2019 10:04:30 GMT
Content-Type: text/plain
Connection: keep-alive
Req-ID: 0000090001ac17f42960e470
Expires: Mon, 05 Aug 2019 11:04:28 GMT
Cache-Control: max-age=3600
Edge-Cache-Age: 2
Cache-Status: HIT
是的,第二个请求已经命中了 Cache,不需要回源了,node 直接用缓存响应了。
开启 WAF
如果希望在网关 node 上开启应用防火墙,防御 SQL 注入、XSS 跨站脚本、 Web 服务器漏洞、木马等攻击,可以这样配置:
- 点编辑(同上)
- 点开 WAF,默认会开启内置的 5 个规则集
- 拦截动作默认是「仅记录日志」,意味着如果发现有威胁的请求只会记录下来,不会真的拦截,这个比较适合调试阶段。
- 点击保存
同样的,发布之后,我们再来测试一下
$ curl -x 47.56.103.89:80 http://foo.test.com/api/root.exe
recevied URI: /api/root.exe
request from IP: 47.56.103.89
server IP: 47.91.165.147
看起来没有异常发生,我们再点开左侧的「WAF 日志」,可以看到一条可疑请求记录,其中原因为命中了关键词 root.exe。
如上只是使用了我们内置的几个规则集,Edge 还可以很方便的添加自定义规则集,请看更多相关文档
更多配置
如上我们已经完成了基本的体验,如果还需要更多的配置,比如限速,设置回源的请求头,设置响应头,自定义错误页 等等,可以从规则的「动作部分」选择对应的动作,比如:
也可以参考相关的文档
多个规则
目前为止,这个测试应用只配置一个规则,也即只定义了以 /api/
为前缀的请求的行为。 同一个应用(域名)的不同请求方式,会有不同的行为,也是很常见的,此时我们需要为不同的请求方式,设置不同的行为,比如回源的上游,cache 策略,WAF 策略等等,很自然的,我们可以新建规则来完成配置。
当有多个规则时,规则的条件部分有重叠会怎么办呢? 不用担心,很简单,只有一个原则: 页面上的显示顺序,即是规则的执行顺序,总是从上面的规则开始往下执行。 如果命中的规则开启了「跳过当前页余下规则」,则不会继续执行余下的规则。
在规则列表里也可以清晰的看到:
配置 SSL 证书
以上体验都是用的 http,如果要通过 https 访问,我们需要配置 SSL 证书。 我们点击左侧栏的「SSL」,一共有三种方式来配置证书,我们来体验下最简单的情况(手动上传证书)
- 点击右上角「新证书」
- 选择「手动上传」
- 选择证书和私钥,可以选择本地文件,也可以直接复制输入证书/私钥的内容
- 保存
同样的,发布之后,我们再来测试一下
$ curl --resolve "foo.test.com:443:47.56.103.89" https://foo.test.com/hello
hello world!
另外还有两种配置证书的方式,
- 通过 Edge 内部集成的 Let’s Encrypt 来自动签发证书
- 直接使用已经在全局配置里上传过的全局证书,这个适合某些泛域名证书可以跨应用共享的场景
请移步更多相关的文档
探索更多功能
至此我们已经体验了最基本的配置,Edge 里还有更多的基础常用功能,比如错误日志,指标统计,缓存刷新,权限控制等等,也还有更多的高级功能,比如适用于跨全球网络的「多层网络」回源,自定义动态指标统计,配置回滚等等,可以慢慢体验,有问题可以查看文档,或者直接与我们联系。
欢迎扫下方二维码,关注「OpenResty 软件」,期待您与我们联系。