You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Envoy访问日志%REQ(:AUTHORITY)%字段如何去端口,有无无端口替代字段

Envoy访问日志:AUTHORITY字段相关问题解答

是否可以从%REQ(:AUTHORITY)%的取值中去除端口部分?

可以,目前有两种成熟的实现方案:

  • 高版本Envoy(v1.22+)直接使用内置的访问日志格式化符即可,无需额外开发
  • 低版本Envoy可以通过自定义过滤器预处理请求头,再在访问日志中引用处理后的字段

是否存在自带:AUTHORITY信息且不带端口的可用字段?

存在,Envoy官方提供了%HOST_NO_PORT%访问日志操作符,该字段的取值逻辑就是从请求的:AUTHORITY伪头(HTTP/2)或Host头(HTTP/1.1)中自动去除端口后缀,返回纯域名/IP部分:

  • 如果原始请求头中本身不携带端口,该字段直接返回原值,不会有截断异常
  • 如果需要自定义逻辑处理(比如特殊端口场景下的保留规则),也可以通过CEL表达式自定义取值,示例配置片段如下:
    access_log:
      name: envoy.access_loggers.stdout
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.access_loggers.stream.v3.StdoutAccessLog
        log_format:
          text_format: "%START_TIME% %HOST_NO_PORT% %RESPONSE_CODE% %BYTES_SENT% \n"
    

如果你的Envoy版本低于v1.22不支持该操作符,可以通过Lua过滤器提前处理:

  1. 在HTTP过滤器链中新增Lua配置,提取不带端口的host写入自定义请求头:
function envoy_on_request(request_handle)
  local authority = request_handle:headers():get(":authority")
  local host_no_port = string.match(authority, "([^:]+)")
  request_handle:headers():add("x-host-no-port", host_no_port)
end
  1. 访问日志中直接引用该自定义头即可:%REQ(X-HOST-NO-PORT)%

内容的提问来源于stack exchange,提问作者JME

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:15:01