全部產品
Search
文件中心

Object Storage Service:基於Windows的ECS執行個體實現OSS反向 Proxy

更新時間:Sep 03, 2024

阿里雲OSS的儲存空間(Bucket)訪問地址會隨機變換,您可以通過在ECS執行個體上配置OSS的反向 Proxy,實現通過固定IP地址訪問OSS的儲存空間。

背景資訊

阿里雲OSS通過Restful API方式對外提供服務。終端使用者通過OSS預設網域名稱或者綁定的自訂網域名方式訪問,但是在某些情境下,使用者需要通過固定的IP地址訪問OSS:

  • 某些企業由於安全機制,需要在出口防火牆配置策略,以限制內部員工和業務系統只能訪問指定的公網IP,但是OSS的Bucket訪問IP會隨機變換,導致需要經常修改防火牆策略。

  • 金融雲環境下,因金融雲網路架構限制,金融雲內網類型的Bucket只能在金融雲內部訪問,不支援在互連網上直接存取金融雲內網類型Bucket。

針對以上問題,您可以通過在ECS執行個體上搭建反向 Proxy的方式訪問OSS。

操作步驟

  1. 建立一個ECS執行個體。

    本文以和Bucket相同地區的Windows Server 2019資料中心版64位中文版系統的ECS執行個體為例。

    如何建立ECS執行個體,請參見選購ECS執行個體

  2. 串連ECS執行個體。

    如何串連ECS執行個體,請參見 串連ECS執行個體

  3. 下載Nginx並解壓。

    本文以Nginx-1.19.2版本為例。

  4. 修改設定檔nginx.conf

    重要
    • 本文僅提供示範環境。考慮到您的資料安全,強烈建議您在實際使用環境中配置HTTPS模組。如何配置,請參見Nginx或Tengine伺服器配置SSL認證

    • 以下配置方式只能代理訪問一個Bucket。

    1. 進入conf檔案夾,使用記事本開啟nginx.conf檔案。

    2. 修改設定檔內容。

      worker_processes  1;
      events {
          worker_connections  1024;
      }
      
      http {
          include       mime.types;
          default_type  application/octet-stream;
      
          keepalive_timeout  65;
          server {
              listen       80;
              server_name  47.**.**.43;
      
              error_page   500 502 503 504  /50x.html;
              location = /50x.html {
                  root   html;
              }
      
             location / {
                  proxy_pass  http://bucketname.oss-cn-hangzhou-internal.aliyuncs.com;
                  proxy_http_version 1.1;
                  proxy_set_header Host $http_host;
                  proxy_connect_timeout 15s;
                  proxy_read_timeout 15s;
                  proxy_send_timeout 15s;
                  proxy_set_header Connection "";
                  proxy_buffering off;
                  proxy_request_buffering off;
              }
         }
      }

      參數

      說明

      server_name

      對外提供反向 Proxy服務的IP,即ECS執行個體的外網地址。

      proxy_pass

      跳轉的網域名稱。

      • 當ECS執行個體與Bucket在同一地區時:填寫目標Bucket的內網訪問網域名稱。關於內網訪問網域名稱的更多資訊,請參見通過內網訪問OSS

      • 當ECS執行個體與Bucket不在同一地區時:填寫目標Bucket的外網訪問網域名稱。關於外網訪問網域名稱的更多資訊,請參見通過外網訪問OSS

      • 您的使用者需通過瀏覽器預覽Bucket中的圖片或網頁檔案:因OSS的安全設定,當使用預設網域名稱通過瀏覽器訪問OSS中的圖片或網頁檔案時,會直接下載。所以,如果您的使用者需通過瀏覽器預覽Bucket中的圖片或網頁檔案,需為Bucket綁定自訂網域名,並在此項中添加已綁定的網域名稱。如何綁定自訂網域名,請參見綁定自訂網域名

      proxy_set_header Host

      添加此項時,Nginx會在向OSS請求的時候,將$host替換為ECS的訪問地址。

      遇到以下情況時,您需要添加此項。

      • 遇到簽名錯誤問題。

      • 如果您的網域名稱已解析到ECS執行個體的外網上,且您的使用者需要通過瀏覽器預覽Bucket中的圖片或網頁檔案。您可以將您的網域名稱綁定到ECS執行個體代理的Bucket上,不配置CNAME。在該情況下,proxy_pass項可直接配置Bucket的內網或外網訪問地址。如何綁定自訂網域名,請參見綁定自訂網域名

      說明

      該選項針對自訂網域名請求到Proxy 伺服器的情境。如果您使用IP地址直接請求訪問Proxy 伺服器, 您需要在nginx.conf檔案中注釋proxy_set_header Host $host

      proxy_connect_timeout

      設定與後端伺服器(如 OSS)的連線逾時時間。此逾時配置決定了 Nginx 在建立與後端伺服器的串連時,最長等待的時間。如果逾時,Nginx 將返回錯誤響應。

      proxy_read_timeout

      控制 Nginx 從後端伺服器讀取響應資料的逾時時間。如果在此時間內未能從後端伺服器讀取到資料,Nginx 將返回錯誤響應。這對於處理可能回應時間較長的請求非常重要。

      proxy_send_timeout

      設定 Nginx 向後端伺服器發送請求資料的逾時時間。此參數確保 Nginx 在等待請求資料發送到後端伺服器期間保持串連,直到逾時或串連顯式關閉。

      proxy_set_header Connection

      設定代理要求標頭中的 Connection 欄位為空白字串,表示在代理請求時,Nginx 不會添加 Connection 頭部。這樣可以避免 HTTP/1.1 持久串連問題,確保與後端伺服器的串連處理正確。

      proxy_buffering

      控制Nginx是否緩衝從後端伺服器接收到的資料。設定為off意味著Nginx將立即轉寄資料給用戶端,而不會進行緩衝,這可以降低延遲,但也可能增加頻寬消耗。

      proxy_request_buffering

      決定 Nginx 是否在將請求體轉寄給後端伺服器之前等待整個請求體完全接收。設定為off表示Nginx將開始接收資料後立即轉寄,無需等待整個請求體接收完成,這有利於即時性要求較高的應用情境。

  5. 返回Nginx主程式檔案夾,雙擊nginx.exe啟動Nginx。

  6. 開放ECS執行個體的TCP 80連接埠。

    Nginx預設使用80連接埠,您需在ECS的安全性群組配置中,允許使用者訪問TCP 80連接埠。

    如何配置,請參見添加安全性群組規則

  7. 測試使用ECS外網地址加檔案訪問路徑訪問OSS資源。

    本文跳轉的網域名稱以OSS預設網域名稱為例。使用本地瀏覽器訪問時,OSS資源預設會被下載。如果您需要實現訪問OSS資源時預覽,您在配置proxy_pass時需要使用自訂網域名。

    說明

    如果訪問的檔案讀寫權限為私人,檔案URL中還需要包含簽名資訊。詳情請參見簽名版本1

相關文檔