2015-04-25 3 views
1

Я начинаю с littleproxy, как я могу создать обратный прокси-сервер?Создайте обратный прокси-сервер littleproxy

Мой прокси получает запросы от клиентов и отправляет их на серверы (серверы только на регулярном сайте, такие как www.xxx.com, содержат только веб-страницу (не в состоянии покоя) и прокси получают ответ от сервера (веб-страницы) и возвращают клиент.

Например, клиент URL является localhost:8080/x, прокси отображает его на www.myserver.com/xy и показывает xy страницы для клиента. Как это сделать с помощью фильтра или HttpServlet.

Моего HTTP сервлет будет, как следовать :

public class ProxyFilter implements Filter { 
     public void doFilter(ServletRequest req, ServletResponse res, 
      FilterChain chain) throws IOException, ServletException { 

     HttpServletRequest request = (HttpServletRequest) req; 

     HttpProxyServer server = 
     DefaultHttpProxyServer.bootstrap() 
     .withPort(8080) 
     .withFiltersSource(new HttpFiltersSourceAdapter() { 
      public HttpFilters filterRequest(HttpRequest originalRequest, ChannelHandlerContext ctx) { 
       return new HttpFiltersAdapter(originalRequest) { 
        @Override 
        public HttpResponse clientToProxyRequest(HttpObject httpObject) { 
         // TODO: implement your filtering here ???? 
         return null; 
        } 

        @Override 
        public HttpResponse proxyToServerRequest(HttpObject httpObject) { 
         // TODO: implement your filtering here ???? 
         return null; 
        } 

        @Override 
        public HttpObject serverToProxyResponse(HttpObject httpObject) { 
         // TODO: implement your filtering here ???? 
         return httpObject; 
        } 

        @Override 
        public HttpObject proxyToClientResponse(HttpObject httpObject) { 
         // TODO: implement your filtering here ???? 
         return httpObject; 
        } 
       }; 
      } 
     }) 
     .start(); 
    } 
    public void init(FilterConfig config) throws ServletException { 

    } 
    public void destroy() { 

    } 
} 

ответ

2

LittleProxy использует заголовок Host для выполнения маршрутизации. Так что простейшая вещь, которую вы можете сделать, это установить Host в качестве реального сервера в clientToProxyRequest методе.

 

    public HttpResponse clientToProxyRequest(HttpObject httpObject) { 
     if(httpObject instanceof FullHttpRequest) { 
      FullHttpRequest httpRequest = (FullHttpRequest)httpObject; 
      httpRequest.headers().remove("Host"); 
      httpRequest.headers().add("Host", "myserver.com:8080"); 
     } 
     return null; 
    } 

Смежные вопросы