首页 > 解决方案 > 使用从其文档中获取的 Vert.x Web 代理代码的 404 错误

问题描述

我正在使用 Vert.x Web 库为反向代理创建测试应用程序。我正在使用 Vert.x 网站上提供的信息:

https://vertx.io/docs/4.1.0/vertx-web-proxy/java/#_using_vert_x_web_proxy

根据上述站点的文档,我编写了一些简单的测试代码:

public class WebTest
{
    public static void main(String[] args)
    {
       Vertx vertx = Vertx.vertx();
  
       HttpClient client = vertx.createHttpClient();

       HttpProxy proxy = HttpProxy.reverseProxy(client);
       proxy.origin(8080,"localhost");
  
       HttpServer server = vertx.createHttpServer();
       Router router = Router.router(vertx);
  
       router.route(HttpMethod.GET,"/foo").handler(ProxyHandler.create(proxy));

       server.requestHandler(router);
       server.listen(8010);
    }
}

我有一个在端口 8080 上运行的 Web 服务器(Vert.x 术语中的所谓“源”)。上面的代码和网站上的代码之间的唯一区别是我使用不同的端口号作为代理和源服务器。根据 Vert.x 网站上的文档,访问 http://localhost:8010/foo 的浏览器应该可以访问源服务器。

相反,我收到 404 Not found 错误。

此代码中是否缺少某些内容?也许文档中未涵盖某些内容?

有谁知道如何使它正常工作?

标签: webserverreverse-proxyvert.x

解决方案


@因素三您缺少指南的后端部分,并且您正在以无组织的方式混合部分。按照指南,它可以是这样的:

    Vertx vertx = Vertx.vertx();

    // Origin Server (Backend 8080)---------
    // Here you deploy the real server with the endpoint ("hello world" in this case)
    HttpServer backendServer = vertx.createHttpServer();

    Router backendRouter = Router.router(vertx);

    backendRouter
        .route(HttpMethod.GET, "/foo")
        .handler(
            rc -> {
              rc.response().putHeader("content-type", "text/plain").end("hello world");
            });

    backendServer.requestHandler(backendRouter).listen(8080);

    // Proxy Server (8010)
    // Here you deploy the server that will act as a proxy

    HttpServer proxyServer = vertx.createHttpServer();

    Router proxyRouter = Router.router(vertx);

    proxyServer.requestHandler(proxyRouter);

    proxyServer.listen(8010);

    // Proxy Magic
    // Here you route proxy server requests (8010) to the origin server (8080)

    HttpClient proxyClient = vertx.createHttpClient();

    HttpProxy httpProxy = HttpProxy.reverseProxy(proxyClient);
    httpProxy.origin(8080, "localhost");

    proxyRouter.route(HttpMethod.GET, "/foo").handler(ProxyHandler.create(httpProxy));

推荐阅读