如何使用 Google Cloud Compute Engine 为 Node.JS 应用程序配置端口转发

Posted

技术标签:

【中文标题】如何使用 Google Cloud Compute Engine 为 Node.JS 应用程序配置端口转发【英文标题】:How to configure Port Forwarding with Google Cloud Compute Engine for a Node.JS application 【发布时间】:2019-07-13 11:16:52 【问题描述】:

我正在尝试为托管在 Google Cloud Compute Engine(Ubuntu 和 nginx)上的 Node.js 应用程序配置端口转发(端口 80 到端口 8080)。

我的最终目标是让像“api.domain.com”这样的网址显示与“api.domain.com:8080”完全相同的内容(实际上:8080 有效)。

但是因为是谷歌平台上的虚拟服务器,我不确定能做什么样的配置。

我尝试了这些解决方案但没有成功(可能是因为它是 Google Cloud 环境):

    Forwarding port 80 to 8080 using NGINX Best practices when running Node.js with port 80 (Ubuntu / Linode)

这里有两个问题:

1.我需要在哪里配置端口转发?

直接在我的 Ubuntu 实例中使用 Nginx 或 Linux 配置文件? 使用 gcloud 命令? 在 console.cloud.google.com 的 UI 中的一个秘密位置?

2.我需要保存哪些设置或配置?

【问题讨论】:

您需要使用代理服务器。常见的是 Nginx 或 Apache。你在使用 Nginx 时遇到了什么问题?另一种选择是使用 Google 负载平衡器。 我知道谷歌云会覆盖一些设置,比如防火墙规则,使得一些 Nginx 设置无用。当我尝试编辑我的 Nginx 配置以进行端口转发时,我根本看不到任何更改。所以,我什至不知道我的设置是否不正确,或者 Google 是否覆盖了某些端口规则。 除非您提供配置文件、错误信息等,否则我无法帮助您使用 Nginx。解决方案在细节中。 根据您的描述“api.domain.com:8080”运行良好,这意味着您的 vm 防火墙规则运行良好。所以我认为你唯一需要做的就是配置你的 nginx 代理 conf 文件。 【参考方案1】:

一种可能性是使用 Google Cloud 负载平衡器。 https://cloud.google.com/load-balancing/docs/

1) 创建一个监听 8080 端口的后端服务

2) 创建一个监听 80 端口的前端服务

3) 然后在这个后端服务上转发前端流量

4) 奖励:您可以创建由 GCP https://cloud.google.com/load-balancing/docs/ssl-certificates#managed-certs 自动管理的 ssl 证书

【讨论】:

这个解决方案更简单!【参考方案2】:

为了未来读者的利益,这里我想出了如何配置端口转发。

    您需要确保 Google 平台上的防火墙配置正确。遵循此处详细描述的此过程:Google Cloud - Configuring Firewall Rules。您需要确保端口 80(或 HTTPS 的 443)和您的 Node.JS 端口(例如,在我的情况下为 8080)已打开。

    您需要直接在服务器上配置端口转发。据我所知,与防火墙规则相反,这不是您可以在 Google Cloud 平台 UI 中进行的配置。就我而言,我需要编辑位于以下位置的 Nginx 配置文件:/etc/nginx/sites-available/default

    使用此示例作为参考来编辑您的 Nginx 配置文件:nginx config for http/https proxy to localhost:3000

    编辑完成后,您需要使用以下命令重新启动 Nginx 服务:sudo systemctl restart nginx

    使用此命令验证 Nginx 服务的状态:sudo systemctl status nginx

    您的端口应正确重定向到您的 Node.js 应用程序。

感谢@John Hanley 和@howie 提供有关 Nginx 配置的指导。

编辑:此解决方案仍然有效,但接受的答案更容易。

【讨论】:

以上是关于如何使用 Google Cloud Compute Engine 为 Node.JS 应用程序配置端口转发的主要内容,如果未能解决你的问题,请参考以下文章

如何从Google Cloud Compute中删除所有区域的实例组

如何更改 Google Compute Engine 服务帐户的范围以将数据写入 Google Cloud Storage 存储桶?

ruby Google Cloud Compute使用Rotate创建快照

如何解决 Google Cloud [Compute Engine] 中的持续非活动计费状态并恢复暂停的 VM 实例?

使用 Go 在 Google Container/Compute Engine 中登录到 Google Cloud

无法在 Google Cloud Compute Engine 上使用 GPU