Skip to content

重写器

3.3.0

重写器可以对HTTP请求和响应体进行动态修改,与内置的rewriteBody/rewriteResponseBody/rewriteRequestBody规则(基于正则匹配和替换)不同,重写器通过外部插件服务提供更灵活的修改能力。

使用重写器

重写器可以作为服务级配置,在services中引用:

services:
- name: service-0
  addr: :8080
  handler:
    type: auto
  listener:
    type: tcp
  rewriter: rewriter-0

rewriters:
- name: rewriter-0
  plugin:
    type: grpc
    addr: 127.0.0.1:8000

插件配置

plugin.type (string, default=grpc)
插件类型:grpchttp
plugin.addr (string, required)
插件服务地址。
plugin.token (string)
认证信息,插件服务可以选择对此信息进行验证。
plugin.tls (object)
设置后将使用TLS加密传输。
plugin.timeout (duration)
请求超时时长。

HTTP插件

rewriters:
- name: rewriter-0
  plugin:
    type: http
    addr: http://127.0.0.1:8000/rewrite

请求体格式:

{"data":"<base64原内容>","metadata":<元数据>}

响应体格式:

{"ok":true,"data":"<base64修改后内容>"}

节点级重写器

重写器也可以在每个转发器节点的rewriteBody/rewriteResponseBody/rewriteRequestBody规则中使用:

forwarder:
  nodes:
  - name: target-0
    addr: example.com:80
    http:
      rewriteResponseBody:
      - type: text/html
        rewriter: rewriter-0
      rewriteRequestBody:
      - type: application/json
        rewriter: rewriter-0

当规则设置了rewriter后,body的修改将委托给重写器插件处理,matchreplacement将被忽略。

rewriter可以与type(内容类型过滤)结合使用,通过设置不同的type将不同类型的请求/响应体发送给不同的重写器处理。

Comments