6

我知道这是主观的和固执的,但我只需要从了解最佳实践可能是什么开始。

我有一个在 localhost 上运行的MERN应用程序,React 脚本当前在端口 3000 上运行,Express.js 应用程序在端口 3001 上运行。

现在我要在 AWS 上实时设置它,我想知道我是否应该像这样创建它:

website.com对于前端 React 的东西,使用 nginx 路由从端口 80 到 3000 的任何内容,同时它调用api.website.com在同一实例上运行在 3001 上,website.com并且 `api.website.com 具有相同的 IP 地址。

或者

website.com 的一个单独实例在不同的 IP 地址上,另一个实例api.website.com在不同的 IP 地址上用于 API 调用?无需指定端口即可访问两者。

我很好奇,因为大多数时候我使用 API,它们没有单独的端口,只有一个子域,我认为是不同的 IP 地址和不同的实例。

记住我想使用 SSL 的最佳设置方法是什么?

4

2 回答 2

1

我会说 Nginx 向世界公开,带有 SSL 证书,所有流量都重定向到端口 443。

其他一切都绑定到 127.0.0.1 并通过 Nginx 代理。将 Nginx 设置为接受api.website.com对端口 443 的请求,然后将它们代理到 127.0.0.1:3000 或 3001 或其他任何内容很简单。

然后防火墙所有其他随机端口并通过 Nginx 绝对路由所有传入流量。

于 2018-07-04T00:08:13.177 回答
1

不需要通过 SSL 为静态应用程序提供服务,但另一方面,您的服务器应用程序必须是安全的。直接与数据库交互的部分堆栈非常关键,必须针对各种漏洞加以保护。除非您遵循最佳实践来保护您的节点应用程序,否则只有 SSL 不会有任何好处。

您可以将子域用于节点应用程序,将根域用于实际站点。此外,您可以通过在 nginx 配置文件中定义不同的服务器部分来为网站使用 80 端口,为您的节点应用程序使用 443 端口。

以下是一些链接,您可以在其中找到在生产中部署节点应用程序时要遵循的最佳实践。

于 2018-07-02T12:03:15.053 回答