全部產品
Search
文件中心

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

更新時間:Sep 18, 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相同地區的Ubuntu 18.04 64位系統的ECS執行個體為例。

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

  2. 串連ECS執行個體。

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

  3. 執行以下命令更新apt源。

    sudo apt-get update
  4. 執行以下命令安裝Nginx。

    sudo apt-get install nginx
    Nginx檔案的預設安裝位置如下。
    目錄 說明
    /usr/sbin/nginx 存放主程式
    /etc/nginx 存放設定檔
    /usr/share/nginx 存放靜態檔案
    /var/log/nginx 存放日誌
  5. 執行以下命令開啟Nginx設定檔nginx.conf

    sudo vi /etc/nginx/nginx.conf
  6. 參考以下說明修改nginx.conf檔案中的HTTP模組。

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

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

    server {
            listen 80;
            server_name 47.**.**.73; 
    
            location / {
                proxy_pass http://bucketname.oss-cn-beijing-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將開始接收資料後立即轉寄,無需等待整個請求體接收完成,這有利於即時性要求較高的應用情境。

  7. 執行以下命令進入Nginx主程式檔案夾。

    cd /usr/sbin/
  8. 執行以下命令啟動Nginx。

    sudo ./nginx
  9. 開放ECS執行個體的TCP 80連接埠。

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

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

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

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

    說明

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

相關文檔