通用

1. 修改配置

在全局配置页面,可以设置网关节点的默认配置。

点击通用,在通用页面右侧是主要分类,可以点击具体分类,快速进入相应的设置选项区。 目前主要有:Worker、SSL、Proxy、Client Request、File Buffer、Log、DNS、Gzip、Brotli 以及 Others。

Worker connections

比如 Worker connections,可以用它控制每个工作进程的最大默认连接数。 这里修改为 10777,并点击右侧的 Save 按钮。

保存成功会自动同步到对应分区的所有网关节点。

SSL

对于 SSL ciphersSSL protocols ,这里提供了四个默认选项。

  • Modern:适用于对客户端比较新的情况。
  • Intermdiate:均衡版本,默认推荐选项。
  • Old:适用于对客户端比较老的情况。
  • Custom:当上面三个默认选项都不能满足需求是,可以进行自定义。

额外信任的 CA 证书

附加可信 CA 证书 中,可以添加一个或多个 PEM 格式的 CA 证书。保存配置后,网关服务器会在系统默认信任的 CA 之外,同时信任这些额外的 CA。每个证书都应包含完整的 BEGIN CERTIFICATEEND CERTIFICATE 标记。

请只添加您确认可信的 CA 证书,因为这些证书会扩展网关服务器的 TLS 信任范围。

Proxy

Proxy 类,可以设置 代理缓存区代理缓冲区代理临时目录等代理相关的配置项。

  • 使用旧代理缓存(Use stale proxy cache):如果没有被代理的服务器能处理请求,则允许使用陈旧的缓存进行响应。

  • 代理缓存区(Proxy Cache Zone):如果我们有多块磁盘,可以设置多个 Proxy Cache Zone 这样可以把缓存分配到不同物理磁盘上提高性能。

    启用多个缓存区时,Edge 以配置的最大容量作为权重使用一致性哈希选择缓存区。 启用 从负载均衡中排除 可以排除某个缓存路径:让它不再参与默认的一致性哈希选择缓冲区, 容量也不再参与分配,但已有缓存文件不会被删除。删除或卸载路径前,请确认流量已经迁移。

  • 代理临时目录(Proxy temporary path):自定义路径用来存储从被代理服务器返回的临时文件。

  • 拦截源站错误页(Intercept the origin site’s error pages):决定是否在状态码 >= 300 时,由 OpenResty Edge 拦截并处理。默认不开启此选项。

  • 代理缓冲区大小(Proxy buffer size):设置用于读取从被代理服务器接收第一部分响应的缓冲区大小。

  • 代理缓冲区(Proxy buffers):为单个连接设置用于从被代理服务器读取响应的缓冲区的数量和大小。如果无法缓存完整的响应,则响应可能会被写入到临时文件中。

  • 代理忙缓冲区大小(Proxy busy buffers size):限制在响应尚未完全读取时可能忙于向客户端发送响应的缓冲区的总大小。

  • 代理临时文件写入大小(Proxy temporary file write size):限制一次写入临时文件的大小。

  • 代理连接超时时间(Proxy connect timeout):设置与被代理服务器建立连接的超时时间,此超时通常不能超过 75 秒。

  • 代理读取超时时间(Proxy reading timeout):设置从被代理服务器读取响应的超时时间。超时仅设置在两个连续的读取操作之间,而不是针对整个响应的传输。

  • 代理发送超时时间(Proxy sending timeout):设置将请求传输到被代理服务器的超时时间。超时仅设置在两个连续的写操作之间,而不是针对整个请求的传输。

  • 代理忽略客户端中止(Proxy ignore client abort):当客户端在收到响应之前关闭连接时是否应关闭与被代理服务器的连接。

    • 在未启用该配置的情况下,如果客户端提前关闭连接,那么就会导致 Edge Node 跟被代理服务器的连接也被关闭。这样就无法复用 Edge Node 和被代理服务器之间的长连接。
  • 代理缓存重新生效(Proxy cache revalidate):对带有 “If-Modified-Since” 和 “If-None-Match” 头的条件请求启用过期缓存内容的重新验证。

HTTP 请求参数配置

HTTP 请求包含如下配置项:

  1. 客户端请求体临时目录

    用来存放客户端请求体的临时目录定义了一个目录,用于存储保存客户请求体的临时文件。如果默认路径无法满足实际需要,你希望将客户的请求体放置在更高速率或者更大容量的磁盘,可以修改此配置。

    默认值:/usr/local/oredge-node/client_body_temp/

  2. 读取客户端请求体超时时间

    该配置项定义了读取客户端请求体的超时。超时只针对两个连续的读取操作之间的时间段,而不是针对整个请求体的传输时间。如果客户端在这段时间内没有传输任何东西,请求将以 408(请求超时)错误终止。

    一般情况下,默认 60 秒的超时时间是足够的。如果您希望缩短超时时间来抵御攻击,可以修改此配置项。如果在一些情况下需要使用更长的超时时间,也可以扩大该超时时间。

    默认值:60 秒

  3. 读取客户端请求头超时时间

    定义了读取客户端请求头的超时。如果客户端没有在这个时间内传输整个头,请求将以 408(请求超时)错误终止。

    默认值:60 秒

  4. 最大请求体大小

    设置客户端请求体的最大允许值。如果请求中的大小超过了配置的值,413(请求体过大)的错误会返回给客户端。请注意,浏览器不能正确显示这个错误。将大小设置为 0 将禁止检查客户端请求体的大小。

    默认值:3 MByte

  5. 请求头缓存大小

    设置用于读取客户端请求头的缓冲区大小。对于大多数请求,1K 字节的缓冲区就足够了。然而,如果一个请求包括长的 cookies, 或者来自 WAP 客户端,它可能不适合在 1K 字节内。

    默认值:1 KByte

  6. 最大请求体缓冲大小

    设置用于读取客户端请求正文的缓冲区大小。如果请求正文大于缓冲区,整个正文或其部分将被写入一个临时文件中。默认情况下,缓冲区的大小等于两个内存页。

    默认值:8 KByte

  7. Keep-alive 超时时间

    限制了通过一个保持连接处理请求的最大时间。在达到这个时间后,连接会在后续的请求处理后关闭。

    默认值:75 秒

  8. 发送超时时间

    设置向客户端传输响应的超时。该超时只在两个连续的写操作之间设置,而不是为整个响应的传输设置。如果客户端在这个时间内没有收到任何东西,连接就会关闭。

    默认值:60 秒

  9. 真实来源 IP 信任地址

    TCP 连接的客户端 IP 在此信任地址列表中时,才使用真实 IP 头修改来源 IP。

    默认值:-

  10. 客户端 IP 来源

    1. X-Forwarded-For

      从 X-Forwarded-For HTTP 头获取真实的客户端 IP 和端口。

    2. Proxy Protocol

      从 Proxy Protocol 协议头获取真实的客户端 IP 和端口。 请确保 网关集群 > 网关分区 中的端口已经开启了 proxy protocol。 详情请参考 Proxy Protocol

    3. X-Real-IP

      从 X-Real-IP HTTP 头获取真实的客户端 IP 和端口。

    4. Custom Header

      从自定义的 HTTP 头字段获取真实的客户端 IP 和端口。

  11. 递归搜索 IP

    当真实 IP 头字段存在多个 IP 地址的时候,则从后往前查找第一个非信任地址作为客户的真实的客户端 IP。

    默认值:False

日志

Log 类,在这里可以对 error logaccess log 的输出进行自定义控制。

错误日志

  • Avoid generating error logs:默认是 DISABLE 状态,当启动时代表不输出任何 错误日志。
  • Logs Path:错误日志的输出路径。
  • Error log level:错误日志输出级别。
  • Maximum number of log files to keep:最多保持日志数目, error logaccess log 将会每小时轮转,只保持最后更新的日志文件以节约磁盘空间。

当前默认值为 168。Edge Admin 表单允许 4–2048。使用 EdgeLang set-access-log(max-kept:) 会覆盖这个全局默认值。

访问日志

为了提高访问日志的写入速度,这里默认开启了缓冲区,适当调整缓冲区大小,可以在性能与资源损耗之间找到比较合适的中间值。 如果不想启用缓冲区,可以直接把缓冲区大小设置为 0

Stream 应用访问日志的 Escape 支持 nonedefaultjson。日志行将作为 JSON 字符串值消费时,可以选择 jsondefault 使用 Stream 日志模块的默认转义。

启用 Gzip compression 后,OpenResty Edge 会在写入日志文件前,对缓冲区中的访问日志数据进行 gzip 压缩,从而减少日志占用的磁盘空间。压缩后的访问日志可以使用 zcat 命令读取。

将日志发送到 Syslog 服务器

通过 Access log syslogError log syslog,可以将访问日志和错误日志发送到 Syslog 服务器。这两个配置项相互独立,因此可以为访问日志和错误日志指定不同的服务器。配置示例如下:

server=127.0.0.1:514,severity=info

配置 Syslog 时无需手动指定 tag。OpenResty Edge 会根据应用协议和日志类型自动添加对应的 tag

应用协议访问日志 tag错误日志 tag
HTTPoredge_http_accessoredge_http_error
Streamoredge_stream_accessoredge_stream_error

启用 Access log syslog 后,访问日志将不再写入本地日志文件。启用 Error log syslog 后,错误日志在发送到 Syslog 服务器的同时仍会写入本地日志文件,以便排查问题。

注意: 目前,应用内单独配置的访问日志不支持发送到 Syslog 服务器。Access log syslog 仅适用于由全局配置控制的访问日志。

DNS

启用 Resolve hostnames from /etc/hosts 后,Edge Node 会先使用节点上 /etc/hosts 文件中的映射解析主机名;没有匹配记录时,再查询配置的 DNS 服务器。

OpenResty Edge 会定时重新读取 /etc/hosts 文件。文件内容发生变化后,用于主机名解析的数据会自动更新,无需重新保存全局配置。

Gzip 压缩

详见 《Gzip 压缩》

Brotli 压缩

详见 《Brotli 压缩》

zstd 压缩

详见 《Zstandard(zstd)压缩》

OpenTelemetry

如果要在页面规则中启用 OpenTelemetry,需要先在全局配置中启用 OpenTelemetry 的功能。

OpenTelemetry 这个分类中存在如下配置项:

  • Enable OpenTelemetry:启用开关,默认是关闭。
  • OpenTelemetry Service Name:用于设置 OTel 资源的“service.name”属性。它用来标识和区分不同的服务或应用程序。为每个服务提供一个唯一的名称,可以帮助在分布式系统中识别特定的服务。
  • OpenTelemetry Trace Context:指定如何传播 traceparent/tracestate 头部。
  • OpenTelemetry Exporter Endpoint:接收 OpenTelemetry 遥测数据的 OTLP 端点的地址。
  • OpenTelemetry Exporter interval: 两次导出数据之间的最大间隔,默认是是 5s。
  • OpenTelemetry Exporter Batch Size: 每个工作进程 (nginx worker) 在一个批次中发送的跨度(spans)最大数量,默认值为 512。
  • OpenTelemetry Exporter Batch Count: 每个工作进程的待处理批次数量,超过限制的跨度将被丢弃,默认值为 4。

使用 otelcol-contrib 采集数据

  1. 安装 otelcol-contrib

    安装 otelcol-contrib 请参考 collector installation

  2. 配置 otelcol-contrib

    下面是一个示例文件,该文件中采集了 访问日志,错误日志,连接指标,以及 trace 信息。

    采集的数据会输出到终端,请根据需要调整 exporters 部分。exporters 的配置可以参考 collector exporters

receivers:
  filelog/access:
    include:
      - /usr/local/oredge-node/logs/access.log
    operators:
      - type: json_parser
        include_file_name: false

  filelog/error:
    include:
      - /usr/local/oredge-node/logs/error.log
    multiline:
      line_start_pattern: ^\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}
    operators:
      - type: regex_parser
        regex: '(?s)(?P<time>\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}) \[(?P<level>\w+)\] (?P<pid>\d+)#(?P<tid>\d+): \*(?P<connection_id>\d+) (?P<message>.*?), (?:client: (?P<client>[0-9a-f.]+), server: (?P<server>[^ ]+), request: "(?P<request>.*?)", host: "(?P<host>[0-9a-f:.]+)"|context: (?P<context>[\w.*]+))'
        timestamp:
          parse_from: attributes.time
          layout: '%Y/%m/%d %H:%M:%S'
        severity:
          parse_from: attributes.level
          preset: none
          mapping:
            debug: debug
            info: info
            info1: notice
            warn: warn
            error: error
            fatal: crit
            fatal2: alert
            fatal3: emerg

  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317

  nginx:
    endpoint: "http://127.0.0.1:8091/basic_status"
    collection_interval: 5s

processors:
  batch:

exporters:
  debug:
    verbosity: detailed

service:
  pipelines:
    logs/access:
      receivers: [filelog/access]
      processors: [batch]
      exporters: [debug]

    logs/error:
      receivers: [filelog/error]
      processors: [batch]
      exporters: [debug]

    metrics:
      receivers: [nginx]
      processors: [batch]
      exporters: [debug]

    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [debug]
  1. 启动 otelcol-contrib 采集

    以安装了 rpm 软件包为例,安装后配置文件在 /etc/otelcol-contrib/conrig.yaml。 更新该文件的配置,然后使用下面的命令启动数据采集。

    注意,上面的示例文件是输出到终端,因此在作为后台服务时需要修改 exporters 配置为期望的后台服务。

    sudo systemctl enable otelcol-contrib
    sudo systemctl start otelcol-contrib
    

    如果修改了配置,需要重启 otelcol-contrib,使用下面的命令

    sudo systemctl restart otelcol-contrib
    

Others

Others 类,可以设置操作日志和应用发布历史的清理策略。

2. 同步选项

通用页面上方展示的是 同步选项,默认展示 default 分区,选项 Automatic Synchronization 表示当前分区的所有配置会自动覆盖其他所有分区的配置。

当选中 Automatic Synchronization 时,只有 default 分区允许被修改。

取消选中 Automatic Synchronization 后,每个分区的修改就不会自动同步到其他分区,此时如果想要把当前分区的配置同步到其他指定分区,点击右上角的选项Copy to other Partitions

然后选择要同步的分区,点击 copy,当前分区的配置就会覆盖指定分区的配置。