如何使用 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 实例?