Littleproxy无限循环

时间:2017-05-04 03:17:05

标签: java netty little-proxy

我需要验证一些用户请求,因此我尝试使用LittleProxy。这个想法是让它对用户透明(iptables> littleproxy> origin server)。

所以我使用iptables将流程重定向到LittleProxy(正在监听127.0.0.1:3127),如下所示:

iptables -t nat -A OUTPUT -p tcp -o eth0 --dport 80 -j DNAT --to 127.0.0.1:3127

如果我使用withTransparent(true)启动它,则会收到错误 400 Bad Request to URI 。这是由于符合RFC 7230而发生的。

final HttpProxyServer server = DefaultHttpProxyServer.bootstrap()
   .withPort(3127).withTransparent(true).start();

所以我尝试按如下方式启动它,并更改请求URI:

final HttpProxyServer server = DefaultHttpProxyServer.bootstrap()
   .withPort(3127).withTransparent(false)
   .withFiltersSource(new HttpFiltersSourceAdapterExt()).start();

并将该方法覆盖如下:

@Override
public HttpResponse clientToProxyRequest(HttpObject httpObject) {
   if (httpObject instanceof DefaultHttpRequest) {
      final DefaultHttpRequest request = (DefaultHttpRequest) httpObject;
      final String host = request.headers().get(HttpHeaders.Names.HOST);
      request.setUri("http://" + host + request.getUri());
   }
    return null;
}

但是更改URI会导致无限循环进入LittleProxy。每次添加新的 Via 标头。

我也尝试使用.withAllowRequestToOriginServer(true),但.withTransparent(true)也会导致无限循环。

学习DirectRequestTest.java我看到我可以测试标题并检查它是否已经有#34; Via"但我不想中止请求。我仍然希望LittleProxy调用原始服务器,检索并向用户提供响应。

所以我的问题是,我如何用LittleProxy实现这个场景?

1 个答案:

答案 0 :(得分:0)

我认为这是因为iptables规则。 Littleproxy再次向目标端口80发出请求。规则将它再次发送到littleproxy。你应该把它放在另一台机器上。