Lua filter
In this example, we show how the Lua filter can be used with the Envoy proxy.
The example Envoy proxy configuration includes two Lua filters that contain two different functions:
- envoy_on_request(request_handle)
- envoy_on_response(response_handle)
See here for an overview of Envoy’s Lua filter and documentation regarding these functions.
Step 1: Build the sandbox
Change to the examples/lua directory.
$ pwd
envoy/examples/lua
$ docker compose pull
$ docker compose up --build -d
$ docker compose ps
    Name                     Command               State             Ports
--------------------------------------------------------------------------------------------
lua_proxy_1         /docker-entrypoint.sh /bin ... Up      10000/tcp, 0.0.0.0:8000->8000/tcp
lua_web_service_1   node ./index.js                Up      0.0.0.0:8080->80/tcp
Step 2: Send a request to the service
The output from the curl command below should include the header added by the Lua filter.
Terminal 1
$ curl -v localhost:8000 2>&1 | grep Foo
Foo: bar                              <-- This is added by the common Lua filter. --<
Step 3: Using multiple Lua filters at the same time
Two Lua filters are configured in the example Envoy proxy configuration. But the second one can only work at a specific route.
The output from the curl command below should include the headers that added by multiple Lua filters.
Terminal 1
curl -v localhost:8000/multiple/lua/scripts 2>&1 | grep header_key_1
< header_key_1: header_value_1        <-- This is added by the second route-specific Lua filter. --<
See also
- Envoy Lua filter
- Learn more about the Envoy Lua filter. 
- Lua
- The Lua programming language.