快速上手

概述

OpenResty Edge 使用 admin + node 的架构,对外承载服务的是 node,所有的配置管理都在 admin 上完成。

管理 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 最基本的功能,比如我们可以配置如下规则:

  1. 点击页面右上方的「新规则」
  2. 点开「启用条件」
  3. URI 前缀匹配 字符串 /api/
  4. 点开「代理」
  5. 选择代理到上游,因为我们还没有上游配置,所以需要选择「新上游…」,开始新建上游
  6. 输入上游的名字:api-server,主机名:47.91.165.147,点击保存,一个新的上游就配置好了
  7. 此时已经自动回到新建规则的界面,点击「创建」

===»>

===»>

此时一个简单的反向代理规则就创建好了,同样的,发布之后即可生效。

这个规则意味着,以 /api/ 为前缀的请求,将通过 HTTP 协议回源到 47.91.165.14780 端口,我们可以验证一下:

$ 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,我们可以如下配置:

  1. 点编辑(上一步创建的规则)
  2. 点开缓存,默认使用 URI + 查询字符串 当做缓存键,我们可以不做改动,其余也保持默认值
  3. 点击保存

同样的,发布的即可生效,我们再来测试一下:

# 第一次请求,注意 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 服务器漏洞、木马等攻击,可以这样配置:

  1. 点编辑(同上)
  2. 点开 WAF,默认会开启内置的 5 个规则集
  3. 拦截动作默认是「仅记录日志」,意味着如果发现有威胁的请求只会记录下来,不会真的拦截,这个比较适合调试阶段。
  4. 点击保存

同样的,发布之后,我们再来测试一下

$ 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”,一共有三种方式来配置证书,我们来体验下最简单的情况(手动上传证书)

  1. 点击右上角「新证书」
  2. 选择「手动上传」
  3. 选择证书和私钥,可以选择本地文件,也可以直接复制输入证书/私钥的内容
  4. 保存

同样的,发布之后,我们再来测试一下

$ curl --resolve "foo.test.com:443:47.56.103.89" https://foo.test.com/hello
hello world!

另外还有两种配置证书的方式,

  1. 通过 Edge 内部集成的 Let’s Encrypt 来自动签发证书
  2. 直接使用已经在全局配置里上传过的全局证书,这个适合某些泛域名证书可以跨应用共享的场景

请移步更多相关的文档

探索更多功能

至此我们已经体验了最基本的配置,Edge 里还有更多的基础常用功能,比如错误日志,指标统计,缓存刷新,权限控制等等,也还有更多的高级功能,比如适用于跨全球网络的「多层网络」回源,自定义动态指标统计,配置回滚等等,可以慢慢体验,有问题可以查看文档,或者直接与我们联系。

欢迎扫下方二维码,关注「OpenResty 软件」,期待您与我们联系。