首页 > 解决方案 > Zuul 代理在 Tomcat vai SpringBootServlet 上不起作用

问题描述

我正在寻求有关 Zuul 面临的问题的帮助,该问题不适用于将 Tomcat 打包到 WAR 中。

独立它工作得很好,但是当我将打包更改为战争并部署到 Tomcat 时 - 请求似乎没有到达 Zuul。

我已经扩展了 SpringBootServletInitializer 并覆盖了 configure() 方法,但这并没有帮助。

注意:请不要建议我使用嵌入式 Tomcat 独立运行 SpringBoot - 这不起作用,因为我需要将 API 网关合并到现有的基础设施设置中。换句话说,我需要在给定边界条件的情况下实现一个网关——它必须部署在 Tomcat 应用程序服务器上。

@SpringBootApplication
@EnableZuulProxy
public class GatewayApplication extends SpringBootServletInitializer {

...

@override 
protected StringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(GatewayApplication.class);
}
}

应用程序.yml

zuul:
    routes:
        freebeer:
            path: "/beer/**"
            url: "https://freedom.com:443"
        default:
            path: "/**"
            url: "http://landing.com/"

当我使用嵌入式 Tomcat 运行独立应用程序时,它工作得非常好,例如: - 对http://localhost:8080/的请求很好地重定向到http://landing.com/ - 以及 ..:8080/beer 是很好地重定向到freedom.com

但是如果将 WAR 部署到 Tomcat - 没有任何效果: - 对 http(s)://tomcat.intranet.com:12345 的请求欢迎我并告知我没有任何内容并建议添加 Web 内容 - 对 http(s) 的请求://tomcat.intranet.com:12345/beer 给了我 404 消息,表明源服务器没有找到目标资源的当前表示,或者它不愿意透露存在的表示

看起来我错过了一些非常明显的东西。但是我已经没有耐心弄清楚并寻求帮助:)

标签: spring-boottomcatservletswarnetflix-zuul

解决方案


解决。请求被简单地发送到错误的上下文 - 到应用程序服务器根目录而不是特定于 Web 应用程序。我通过将战争命名为 ROOT.war 来解决它


推荐阅读