我需要在需要部署在谷歌云运行中的 nodejs 应用程序前面设置反向代理 nginx。
用例 - 需要通过 nginx 提供 gzip 压缩的资产(我不想为 gzip 压缩开销节点) - 阻止小型 DDOS 攻击
我没有找到任何在云运行中设置 nginx 和节点的教程。
我还需要为节点安装 PM2。
如何在 docker 中进行此设置?还有如何在部署之前配置 nginx?
提前致谢
我需要在需要部署在谷歌云运行中的 nodejs 应用程序前面设置反向代理 nginx。
用例 - 需要通过 nginx 提供 gzip 压缩的资产(我不想为 gzip 压缩开销节点) - 阻止小型 DDOS 攻击
我没有找到任何在云运行中设置 nginx 和节点的教程。
我还需要为节点安装 PM2。
如何在 docker 中进行此设置?还有如何在部署之前配置 nginx?
提前致谢
我需要在需要部署在谷歌云运行中的 nodejs 应用程序前面设置反向代理 nginx。
Cloud Run 已经提供了反向代理 - Cloud Run Proxy。这是为 Cloud Run 提供负载平衡、提供自定义域、身份验证等的服务。但是,Cloud Run 的设计并没有阻止您在容器内使用 Nginx 作为反向代理。Cloud Run 的设计并没有阻止您将 Nginx 用作另一个 Cloud Run 服务的独立容器前端。请注意,在最后一种情况下,您将支付两倍于您需要两个 Cloud Run 服务的费用,一个用于 Nginx 服务 URL,另一个用于节点应用程序。
用例 - 需要通过 nginx 提供 gzip 压缩的资产(我不想为 gzip 压缩开销节点) - 阻止小型 DDOS 攻击
您可以在节点应用程序或 Nginx 中执行压缩。结果是一样的。性能影响是一样的。Nginx 不提供任何开销节省。Nginx 在某些情况下可能更方便。
您对阻止小型 DDOS 攻击的评论。Cloud Run 自动缩放,这意味着每个 Cloud Run 实例都将有限地暴露于 DOS。随着 DDOS 流量的增加,Cloud Run 将启动更多容器实例。在没有您事先请求的情况下,Cloud Run 将停止扩展至 1000 个实例。Nginx 不会提供任何我能想到的减轻 DDOS 攻击的好处。
我没有找到任何在云运行中设置 nginx 和节点的教程。
我不知道有关 Nginx 和 Cloud Run 的特定文档。但是,您不需要一个。任何涵盖 Nginx 和 Docker 的文档都可以。如果要在与节点应用程序相同的容器中运行 Nginx,则需要编写自定义脚本来启动 Nginx 和 Node。
我还需要为节点安装 PM2。
不可能。PM2 具有用户界面和 GUI。Cloud Run 仅通过 HTTP 从 Cloud Run 实例公开 $PORT。
如何在 docker 中进行此设置?还有如何在部署之前配置 nginx?
网上有很多设置 Nginx 和 Docker 的教程。
下面举两个例子。互联网上有数百个例子。
我已经回答了你的每一个问题。现在一些建议:
只要您遵循其设计标准和目的,Cloud Run 就可以轻松处理具有出色性能和可扩展性的 Node.js 应用程序。
要记住的关键因素:
低成本,您只需为请求付费。重叠请求与一个请求的成本相同。
无国籍。容器在不需要时会关闭,这意味着您必须针对重启进行设计。将状态存储在其他地方,例如数据库。
仅在端口 $PORT 上提供流量,今天是 8080。
公共流量可以是 HTTP 或 HTTPS。从 Cloud Run 代理到容器的流量是 HTTP。
自定义域名。Cloud Run 使 URL 的 HTTPS 变得非常简单。
更新:公共端点(公共流量)现在仅支持 HTTPS。
我认为您应该考虑使用不同的方法。
在单个容器中运行多个进程并不是最佳实践。正如您所描述的,更常见的代理实现是使用 2 个容器(代理通常称为边车),但这在 Cloud Run 中是不可能的。
Google App Engine 可能更合适。
App Engine Flexible 允许部署由 Nginx 代理(在幕后)的容器。您可以将静态内容与 Flexible 一起使用,并且可以合并 CDN。App Engine Standard 也可以满足您的需求。
https://cloud.google.com/appengine/docs/flexible/nodejs/serving-static-files https://cloud.google.com/appengine/docs/standard/nodejs/runtime
与 Cloud Run 一样,App Engine 是无服务器的,但提供了更大的灵活性并且是一项更成熟的服务。App Engine 也集成了更多(全部?)GCP 服务,而 Cloud Run 仅限于一个子集。
或者,您可以考虑使用 Kubernetes(引擎)。这提供了几乎无限的灵活性,但需要更多的操作。您可能已经知道,有一个 Cloud Run 实现运行在 Kubernetes、Istio 和 Knative 之上。
Cloud Run 是一项引人注目的服务,但仅当您能够满足其(当前)受限要求时才适用。
我有好消息要告诉你。我已经写了一篇关于您所需要的示例代码的博客文章。
此示例将 NGINX 放在前面(Cloud Run 上的端口 8080),同时选择性地将流量代理到在同一容器中运行的另一个服务(在端口 8081 上)。
谷歌云计算系统
要了解 GCP Computing,请先看下图:
对于您的情况,我完全建议您使用 App Engine Flex 来部署您的应用程序。它支持 docker 容器,nodejs,... 要了解如何将 nodejs 部署到 GAE Flex,请访问此页面https://cloud.google.com/appengine/docs/flexible/nodejs/quickstart
如果需要,您可以安装一些第三方库。此外,GCP 支持全局/内部负载均衡器,您可以将其应用到您的 GAE 服务中。