集成 TomCat 和 Node 服务器

Posted

技术标签:

【中文标题】集成 TomCat 和 Node 服务器【英文标题】:Integrate TomCat and Node server 【发布时间】:2018-09-04 10:46:16 【问题描述】:

在开发过程中,我在 TomCat 服务器上部署了一个现有的 JSP、Anuglar 1 应用程序。我想将 JSP 页面一一迁移到 Anuglar 2+。

我正在为 Angular 2+ 迁移页面使用 Node / NPM。是否可以在 TomCat 服务器中设置代理,以便每当请求 Angular 2+ 页面时,它会将用户重定向到 Node 服务器以提供 Angular 2+ 页面?

我了解 Angular 2+ 页面可以直接复制到 TomCat 服务器,但需要额外的编译步骤才能将它们转换为静态 JS 页面。我想直接从 Node 服务器为它们提供服务以加快开发速度。

【问题讨论】:

【参考方案1】:

首先,您真的不应该动态地提供angular 页面。即使您确实从 node 提供它们,也请提供已编译的静态页面而不是 ng serve - 出于安全、性能和其他原因。

话虽如此,您肯定可以做到这一点。这在一定程度上取决于您的设置,但归根结底是您需要将所有angular 页面代理到node 服务器。这与 Angular 本身没有太大关系。

因此,最简单的方法是告诉Apache(或nginx 或您的Tomcat 前面的任何人)将所有404 代理到node 服务器。然后node 将呈现angular 站点,这反过来将匹配 url 并呈现给定页面,或者如果找不到,则呈现它自己的 404 版本。

或者,为您的apache 或其他任何内容提供一个特定的 URL 列表(已移植)以传递到 node 服务器。

如果您不使用Apache,而是直接从Tomcat 提供服务(您不应该),您可以使用this 之类的东西。

【讨论】:

感谢您的详细回答。我认为它应该工作。目前,我设法通过在 Node 服务器上创建代理来做到这一点。【参考方案2】:

Tomcat 本身没有内置反向代理。但是,如果您在应用程序中实现代理(即作为 servlet 或过滤器),您可以完成您的要求。

为此,您可以使用现有软件,例如 Netflix Zuul,或者如果您使用的是 Spring,则使用 Spring Cloud Netflix。 Zuul 不仅具有反向代理功能,还具有更多功能,但它适用于生产和开发。

Tomcat Wiki 有更多选项,我相信您可以通过搜索“反向代理 servlet”之类的内容找到更多选项。如果您要将其投入生产,请务必小心,并测试您最终使用的解决方案的性能和安全性。

您也可以在 Tomcat 和您的节点服务器前面放置一个传统的反向代理,如 Apache HTTPD 或 Nginx,但这是在您的开发人员机器上运行的另一件事。

希望有帮助!

【讨论】:

以上是关于集成 TomCat 和 Node 服务器的主要内容,如果未能解决你的问题,请参考以下文章

Apache 和 Tomcat 之间的集成 - mod_jk

Tomcat开发技术之与HTTP服务器的集成

session共享服务器:tomcat和memcached集成在一台主机

solr索引服务器的配置和solrj集成开发总结

tomcat服务器和HTTP协议

揭秘springboot集成tomcat原理