Undertow - 如何设置反向代理来监控我的 REST API 的 HTTP/HTTPS 流量

Posted

技术标签:

【中文标题】Undertow - 如何设置反向代理来监控我的 REST API 的 HTTP/HTTPS 流量【英文标题】:Undertow - How to Setup a Reverse Proxy to Monitor HTTP/HTTPS Traffic to my REST API 【发布时间】:2018-06-03 22:12:51 【问题描述】:

我想基本上从我的计算机嗅探 HTTP/HTTPS 请求和响应到远程 URL(基本上是 REST API)。我知道有很多工具可以帮助我获得我想要的东西,但我必须编写一个实用程序来在 Java 中执行此操作(因为我们正在开发的一些应用程序将使用它)。

我想要做的是设置一个代理(或反向代理 - 我对术语的理解仅限于此),通过它我将所有请求路由到真正的 API。此代理必须捕获请求正文(在 POST 或 PUT 的情况下)并将请求转发到真正的 API,捕获其响应并将其发送回客户端。

我遇到了 Undertow,我可以使用它的 LoadBalancingProxyClient 代理客户端创建和运行反向代理。但我有几个问题。

假设我的 API 是 http://myrealapplication.com/rest/operation1,我想向这个 API 发布一个 JSON。

我已经创建了一个代理服务器如下:

        LoadBalancingProxyClient loadBalancer = new LoadBalancingProxyClient();
        loadBalancer.addHost(new URI("http://myrealapplication.com"));
        loadBalancer.setConnectionsPerThread(20);

        Undertow reverseProxy = Undertow.builder()
                .addHttpListener(8990, "localhost")
                .setIoThreads(4)
                .setHandler(Handlers.requestDump(new ProxyHandler(loadBalancer, 3000, null)))
                .build();
        reverseProxy.start();

所以一旦我启动了我的反向代理服务器,有两件事:

    我的反向代理实际上已成为我真实 API 的别名,但我如何在这一层捕获请求和响应? 通过上述设置,为了让我的请求通过此代理,我必须将我的 URL 更改为 http://localhost:8990/rest/operation1,这可能是不可接受的,因为我们期望做的是设置 localhost:8990作为代理,并将我的 URL 保留为 http://myrealapplication.com/rest/operation1,这样它就可以看到最终客户端,因为响应来自实际的 API。

我可以使用 undertow 来实现这一点吗?或者是否有任何其他工具可以公开我可以在我的程序中使用的 Java API?

请帮忙!

谢谢, 斯里拉姆

【问题讨论】:

【参考方案1】:

我认为您实际上正在寻找的是Forward Proxy。 这是示例代码,可帮助您创建一个。

public class ForwardProxyWithUndertow 

  public static void main( String[] args ) 
    final HttpHandler forwardProxyHandler = new ConnectHandler(ForwardProxyWithUndertow::handleNotFound );

    Undertow.builder()
      .addHttpListener(8080, "localhost")
      .setHandler( forwardProxyHandler )
      .build()
      .start();
  

  static void handleNotFound( HttpServerExchange e )
    e.setStatusCode(404);
    e.endExchange();
  

希望对您有所帮助! ;)

【讨论】:

谢谢,但是如何捕获请求和响应?

以上是关于Undertow - 如何设置反向代理来监控我的 REST API 的 HTTP/HTTPS 流量的主要内容,如果未能解决你的问题,请参考以下文章

实现一个行为类似于 nginx 的 Undertow 反向代理

压缩 Undertow 服务器响应

nginx安装监控设置反向代理

如何配置系统通过 ssh 反向隧道/代理使用 git?

如何在 Nginx 中为 Janus REST api 和 socket api 设置反向代理?

如何在多个端口上设置反向代理(tcp & udp)