集成 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