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

如何配置Envoy加载指定路径的本地外部Lua脚本文件

Envoy 外部Lua脚本加载配置修改方案

具体操作步骤

  • 第一步:创建独立Lua脚本文件
    在目标路径/envoy/lua/scripts/下新建脚本文件,可命名为response_hook.lua,写入原内联的业务逻辑:
function envoy_on_response(response_handle)
    body_size = response_handle:body():length()
    response_handle:headers():add("response-body-size", tostring(body_size))
    response_handle:headers():add("foo", "bar")
end
  • 第二步:调整Envoy YAML配置
    需要修改两个核心配置,同时修正一个会导致逻辑不生效的顺序问题:

    1. 调整HTTP过滤器顺序:Envoy 强制要求envoy.filters.http.router必须放在所有HTTP过滤器的最后一位,原配置将router放在Lua过滤器之前,会导致Lua逻辑完全不执行,需要调换两者顺序。
    2. 替换Lua过滤器配置字段:删除原有的inline_code配置段,改用source_code.filename字段指定Lua脚本的绝对路径。

    修改完成后的完整配置如下:

static_resources:
  listeners:
    - address:
        socket_address:
          address: 0.0.0.0
          port_value: 10000
      filter_chains:
        - filters:
          - name: envoy.filters.network.http_connection_manager
            typed_config: 
              '@type': "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager"
              stat_prefix: http_proxy
              route_config: 
                name: all
                virtual_hosts:
                  - name: allbackend_cluster
                    domains: 
                      - '*'
                    routes:
                      - match: { prefix: "/"}
                        route:
                          cluster: cluster_wackopicko
              http_filters:
                # Lua过滤器必须放在router之前
                - name: envoy.lua
                  typed_config:
                    "@type": type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua
                    source_code:
                      filename: "/envoy/lua/scripts/response_hook.lua"
                # Router过滤器必须放在所有http_filters的最后
                - name: envoy.filters.http.router

  clusters:
    - name: cluster_wackopicko
      connect_timeout: 1s
      lb_policy: ROUND_ROBIN
      load_assignment:
        cluster_name: cluster_wackopicko
        endpoints:
        - lb_endpoints:
          - endpoint:
              address:
                socket_address:
                  address: 127.0.0.1
                  port_value: 8081
  • 第三步:配置Ubuntu环境文件权限
    Envoy运行进程的用户需要拥有Lua脚本文件、上级目录的可读权限,否则会报文件加载失败。如果是通过官方apt源安装的Envoy,默认运行用户为envoy,执行以下命令赋权即可:
# 给脚本目录及文件添加可读权限,也可按需调整为对应属主权限
chmod -R o+r /envoy/lua/scripts/
  • 第四步:加载验证
    重启Envoy进程或者调用Envoy热重载接口加载新配置,之后请求10000端口的服务,检查响应头中是否存在response-body-size和foo两个字段,正常返回即代表外部脚本加载成功。

注意:Envoy不会自动监听外部Lua脚本的文件变动,后续修改Lua脚本内容后,需要重启/重载Envoy配置才会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 07:33:19