Google云存储反向代理。用于使用私有Google云存储对象托管私有静态站点。
您想使用GCS存储桶来提供静态站点,但要限制对它们的访问。
这种反向代理微服务将作为一个简单的HTTP服务器,用于一系列GCS存储库。然后,您可以使用任何适当的方法来限制对其的访问。例如将其放在Nginx,Caddy或VPN后面。
通过浏览器访问私有GCS对象需要编码在URL中的特殊令牌。这将打破大多数(如果不是全部)静态站点,因为它们无法生成这些令牌或预测其要求或链接到的任何资产的URI。但是,将存储对象公开意味着无法限制对其的访问。
此反向代理将在预期的(相对),URI和根本不限制对这些对象的访问范围内的HTTP上的私人对象。但是,通过将此服务器放在另一个反向代理后面,例如NGINX或将其放在VPN上,您将能够以最适合您需求的方式控制访问。
NB(如果您在外壳中已安装了gcloud SDK运行
gcloud info
以检查您已登录,并且具有正确的项目ID集)。
TARGET_BUCKETS
env var期望逗号分开的存储库列表,例如:
TARGET_BUCKETS='bucket-one,bucket-two'
除非定义一个或多个target_buckets,否则服务器将投掷。
将HISTORY
env var设置为TRUE将在历史模式下启动服务器,以获得更好的水疗支持。它将使用Buckets root index.html
文件响应任何没有文件扩展名的路径。
npm install
TARGET_BUCKETS="bucket-name" npm start
一旦服务器启动并运行,要访问存储桶中的私有对象,应提出get请求:
<proxy-host>:<proxy-port>/<bucket-name>/<file-path>
如果文件路径在存储桶中存在,并且服务器有读取该文件路径,则反向代理将其内容作为响应发送。如果出于任何原因,该文件无法从存储桶中检索,则服务器将返回404。
如果所请求的存储桶不在target_buckets的列表中,则它将返回403,无论其真正的存储桶与否。
目前仅支持Get请求方法。
拥有单个存储桶模式意味着不需要将所有请求都带有存储桶名路径,因此请求<proxy-host>:<proxy-port>/<file-path>
将从单个目标存储桶请求文件路径。
该项目使用Micro,这意味着我们可以在开发中使用出色的Micro-Dev工具。
TARGET_BUCKETS="bucket-name" npm run dev
ADC使用计算引擎,Kubernetes引擎,App Engine和Cloud功能提供的默认服务帐户为在这些服务上运行的应用程序提供。
从设置服务器的身份验证到服务器生产应用程序
由于上述内容,我建议您使用Compute Engine,Kubernetes Engine或App Engine在其中为您处理身份验证。
我提供了一个dockerfile来入门而无需安装节点。这将无法在本地工作,因为它无法使用Google Cloud SDK设置任何身份验证。
但是,当部署到计算引擎时VM实例身份验证时,请为您处理身份验证。要查看如何在VM实例上部署Docker映像,请查看本指南。不要忘记设置TARGET_BUCKETS
环境变量,可以通过遵循本指南来完成。