如果使用Express,是否需要nginx?

4
我有一个在Digital Ocean droplet上运行的Express nodeJS Web应用程序。该nodeJS应用程序提供后端API。我有两个React前端,它们使用不同域名的API。这些前端可以托管在同一台服务器上,但是我的开发人员告诉我应该使用另一台服务器来托管前端,例如Cloudflare。
我读到nginX可以在同一台服务器上托管多个站点(即在同一台服务器上托管我的前端),但不确定是否这样做是好的实践,因为我可能无法使用Cloudflare。
关于安全性,有人能告诉我是否需要nginX以及我的选项吗?
谢谢
1个回答

2

这是一个非常开放性的问题,但我会尽力回答:

就安全性而言,有人能告诉我我是否需要 nginx 以及我的选项吗?

在这两种情况下,您都需要使用 Nginx(或Apache)。使用 Express 或不使用 Express,单个服务器还是多个服务器,Express 只是一个构建路由的应用程序框架,但仍然需要一个服务来响应网络请求,这就是 Nginx 和 Apache 所做的事情。

您可以避免使用 Nginx,但那样的话,您的用户将不得不直接向您启动 Express 的端口发出请求。例如:http://my-site.com:3000/welcome 就安全性而言,最好隐藏端口号并 使用 Nginx 的反向代理,这样您的用户只需浏览 http://my-site.com/welcome

我的开发人员告诉我应该使用另一个服务器来托管前端,比如Cloudflare。
截至今日,Cloudflare并不提供托管服务。它提供CDN来托管一些文件,但不能托管整个站点。您需要另一个Digital Ocean实例来完成这个任务。在Cloudflare论坛帖子中,我找到了这样一段话:“Cloudflare不是主机。 Cloudflare的基本服务是DNS提供者,您只需指向现有的主机。”
我已经阅读过nginX可以使同一服务器托管多个站点的文章。

是的,Nginx(以及Apache)可以在同一台服务器上托管多个站点,使用不同名称或相同名称作为域名(www.my-backend.comwww.my-frontend.com)或子域名���www.backend.my-site.comwww.my-site.com)。

...但不确定这是否是好的做法

这绝对不是一个坏习惯,将应用程序分开放在不同的子域中非常常见。保持它们分开的几个有效原因可能是:

  • 因为您希望如果前端失败,后端API仍然可以工作。
  • 因为您想平衡网络流量。
  • 因为您只是想将它们分开(微服务架构)。

滥用这些微服务(例如获取PI值的微服务)将是一个不好的做法。


谢谢,但是Express充当服务器,我一直在监听端口。 - Orange Juice Jones
是的,你可以监听端口。问题在于当你想让用户访问该站点时。这时他们必须去_site.com:3000_或者类似的地址。另一方面,如果这不是问题,那么我认为绝对没有必要设置Nginx反向代理。 - adelriosantiago
之前信息不够详细,很抱歉。我想要托管 API 服务器(apiSite.com),可以在任何端口上运行,但必须是 SSL 安全的,并且有两个公共面向前端(site1.com 和 site2.com)也需要 SSL。理想情况下,选项 1 是将这三个站点托管在单个服务器上,但这取决于复杂性。选项 2 是我可以将前端托管在便宜的静态托管提供商上。我想了解这两个选项在技术上涉及到什么。 - Orange Juice Jones

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接