private static HttpRequest addForwarded(ServiceRequestContext ctx, HttpRequest req) {
        // This is a simplified example. Please refer to https://datatracker.ietf.org/doc/rfc7239/
        // for more information about Forwarded header.
        final StringBuilder sb = new StringBuilder();
        sb.append("for: ").append(ctx.remoteAddress().getAddress().getHostAddress());
        sb.append(", host: ").append(req.authority());
        sb.append(", proto: ").append(ctx.sessionProtocol());

        return req.withHeaders(req.headers().toBuilder()
                                  .add(HttpHeaderNames.FORWARDED, sb.toString()));
    }
We used hardcoded backend addresses. But you can use other service discovery mechanisms to configure
backends dynamically using {@link DnsServiceEndpointGroup}, ZooKeeper or Central Dogma.
See <a href="https://armeria.dev/docs/client-service-discovery">service discovery</a>,
<a href="https://armeria.dev/docs/advanced-zookeeper">Service discovery
with ZooKeeper</a> and <a href="https://line.github.io/centraldogma/">centraldogma</a>.
examples/proxy-server/src/main/java/example/armeria/proxy/ProxyService.java