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
環境變量,可以通過遵循本指南來完成。